可能.push()到动态命名的键?

时间:2018-10-17 16:43:34

标签: javascript arrays loops dynamic foreach

我有一个对象,我想使用循环将不确定数量的其他对象推送到其中。为了使它井井有条,我想根据循环运行的次数来动态命名键。我有以下内容:

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 :(得分:1)

forEach()使您已经可以访问索引。无需创建counter变量。 Example usage。我绝对建议您使用简单的索引,而不要使用'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) )

答案 1 :(得分:0)

因此,您通过分配JSON解析(而非所需的数组)来创建formsJson['form'+counter]。试试这个:

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

答案 2 :(得分:0)

也许您想找出类似的东西

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

现在您可以按下项目了

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

此外,您还将在保存操作时自动保存操作