Как перебирать различные переменные / состояния для создания объекта? - PullRequest
0 голосов
/ 07 января 2019

Мне нужна помощь для перебора переменных / элементов состояния для создания объекта. Я собираюсь перебрать состояние firstName, состояние lastName и многие другие состояния. Код становится слишком сложным. Интересно, есть ли правильный способ построить объект для вызова graphql? или просто лучший способ построить объект?

У меня есть страница профиля, на которой есть формы для обновления учетной записи пользователя. Каждый вход формы имеет состояние и реквизиты setState. При отправке формы эти значения необходимо сверять с предыдущей запрашиваемой информацией, хранящейся в объекте учетной записи, хранящемся в состоянии. Я использую конечную точку graphql, и когда я вызываю вызов для обновления учетной записи, у меня есть 3 варианта для каждого значения параметра в вызове graphql. Например, firstName может быть 1) Нуль (удалить в базе данных) 2) Некоторое ненулевое значение (измените это значение в базе данных) 3) поле не существует в вызове graphql call (ничего не делать с этим атрибутом) Код ниже я должен сделать для 20 значений состояния, что не практично.

// If there is a difference between client's firstName and queried firstName in server
if (firstName != account.firstName) {
  //If we stored firstName as empty String
  if(firstName === ''){ 
    //If the firstName queried is not empty
    if(account.firstName != null) {
      //Set the objects first name attribute to null, so server deletes field
      input['firstName'] = null;
    } else {
      //firstName is empty string and server value is null, so do nothing, do not add attribute firstName to object "input"
    }
  } else {
    //firstName is not an empty string so add it to object value
    input['firstName'] = firstName;
  }
}

Если есть лучший способ сделать это, я буду рад помощи.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Есть много способов решить эту проблему. Я предлагаю вам использовать некоторые функции Underscore JS обеспечивает:

pairs_.pairs(object)

Преобразование объекта в список [key, value] пар. Противоположность объекта.

_.pairs({one: 1, two: 2, three: 3});
=> [["one", 1], ["two", 2], ["three", 3]]

Затем вы можете перебирать массив

_.each(array, function(pair) {
// Insert the input assignment code here for each key  
});
0 голосов
/ 07 января 2019

Одним из способов решения этой проблемы является использование скобочной нотации для извлечения. Укажите key, для которого вы хотите извлечь значение и значение, с которым оно должно проверяться.

function getComputedValue(value, key) {
  if (value != account[key]) {
    if (value === '') {
      if (account[key] != null) {
        input[key] = null;
      } else {
        
      }
    } else {
      input[key] = value;
    }
  }
}

let firstName = getComputedValue("Tom", "firstName");
let lastName = getComputedValue("Smith", "lastName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...