Можно ли .push () использовать ключ с динамическим именем? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть объект, к которому я хотел бы добавить неопределенное количество других объектов, используя цикл.Чтобы сохранить его организованность, я хотел бы динамически называть ключи, основываясь на их количестве повторений цикла.У меня есть следующее:

let formsJson = {};
let counter = 1;

//savedForms are where the objects that I want to push reside
savedForms.forEach( form => {
  formsJson['form'+counter] = JSON.parse(form.firstDataBit_json);

  //This is where I'm having trouble

  counter = counter + 1;
});

Я могу точно передать первый бит данных и также назвать ключ динамически.Но мне нужно добавить еще 2 объекта к тому же динамическому ключу, и вот тут у меня проблемы.Если я попробую очевидное и сделаю:

formsJson['form'+counter].push(JSON.parse(form.secondDataBit_JSON));

, я не получу никакого вывода.Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Может быть, вы хотите выяснить что-то вроде этого

savedforms.forEach((form, index)  => 
 formsJson[`form${index + 1}`] = [ JSON.parse(form.secondDataBit_JSON)]) 

Теперь вы можете нажать на элемент

formsJson[`form${index + 1}`].push(JSON.parse(form.secondDataBit_JSON));`

Также здесь вы сохраните операцию при увеличении, это будет автоматически

0 голосов
/ 17 октября 2018

forEach () уже дает вам доступ к индексу.Нет необходимости создавать переменную counter. Пример использования .Я бы определенно рекомендовал использовать простой индекс и не использовать клавишу 'form'+counter.

В вашем примере мне не ясно, что значение, присваиваемое в цикле forEach, является массивом.Так что неясно, можете ли вы push к любому данному элементу в этом.Но обычно этот синтаксис должен

. Лично я бы предпочел иметь функцию, которая выводит все значение элемента.Это обеспечит лучшую инкапсуляцию, тестируемость и поможет применять значения по умолчанию.Что-то вроде:

function createItem(param1) { 
  let item = [];
  item.push(param1.someElement);
  if (foo) {
    item.push(...);
  } else {
    item.push(...);
  }
  return item;
}

formsJson['form'+counter] = createItem( JSON.parse(form) )
0 голосов
/ 17 октября 2018

Итак, вы делаете formsJson['form'+counter] a, назначая анализ JSON, а не массив, как вам нужно.Попробуйте это:

formsJson['form'+counter] = [];
formsJson['form'+counter].push(JSON.parse(form.firstDataBit_json));
formsJson['form'+counter].push(JSON.parse(form.secondDataBit_JSON));
...