如何在邮递员中使用JavaScript向JSON数组添加唯一对象

时间:2019-07-09 08:44:07

标签: javascript json postman

我正在尝试将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。请为我指出正确的方向,我该怎么办?

2 个答案:

答案 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,
});

使用地图是因为您每次创建新作用域并返回一个新对象时,都不会发生现有的问题,该问题将覆盖您已经在数组中引用了该对象的属性。