我正在尝试将json对象添加到json数组,但是似乎出了点问题。 我得到的数组元素是什么-
0:{}
local:"con"
name:"con"
order:15
1:{}
local:"con"
name:"con"
order:15
我期望发生什么-
0:{}
local:"con"
name:"con"
order:15
1:{}
local:"con2"
name:"con2"
order:16
我希望points
数组应该具有所有唯一的json对象(非常适合循环迭代),但是它将所有先前添加的json替换为当前json(当前迭代)对象,并且整个数组在所有索引处都具有相同的json对象职位
代码-
for(var i = 0; i < machineDetails.length; i++)
{
machine['name'] = machineDetails[i].name;
machine['local'] = machineDetails[i].localName;
machine['order'] = machineDetails[i].orderInLine;
points.push(machine);
console.log(points);
}
除上述内容外,我还尝试了points[i].push(machine);
,但它也不起作用,并抛出错误为push property is not defined
。请为我指出正确的方向,我该怎么办?
答案 0 :(得分:1)
您需要在循环内部移动一个空对象的分配,以防止引用相同的对象,从而导致内部的值相同。
for (var i = 0; i < machineDetails.length; i++) {
machine = {};
或更短:
for (var i = 0; i < machineDetails.length; i++) {
points.push({
name: machineDetails[i].name,
local: machineDetails[i].localName,
order: machineDetails[i].orderInLine
});
}
答案 1 :(得分:0)
使用数组时,可以使用不同类型的迭代,包括array.map
,这似乎正是您正在做的事情:将名为machineDetails
的数组映射到名为points
的新数组:< / p>
const points = machineDetails.map(({ name, localName, orderInLine}) => ({
name,
local: localName,
order: orderInLine,
});
使用地图是因为您每次创建新作用域并返回一个新对象时,都不会发生现有的问题,该问题将覆盖您已经在数组中引用了该对象的属性。