我有一个对象,我想使用循环将不确定数量的其他对象推送到其中。为了使它井井有条,我想根据循环运行的次数来动态命名键。我有以下内容:
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));
我没有任何输出。有没有办法做到这一点?
答案 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));`
此外,您还将在保存操作时自动保存操作