将新元素添加到数组中的对象

时间:2018-06-15 02:47:09

标签: javascript arrays object

让我说我有和数组由对象组成:

var points = [
  { id: 1, a: 0, b: 3 },
  { id: 2, a: 4, b: -1 },
  { id: 3, a: -1, b: 5 },
  { id: 4, a: 41, b: 2 },
  { id: 5, a: 69, b: 3 },
]

我想迭代每个项目并添加a + b以获取新项d。然后,我想在数组中的每个对象中添加d以获取新值。当我尝试下面的内容时,它只添加了5个额外的对象,而不是将新元素(key = value,ex:d:3)附加到每个单独的对象。我在这里做错了什么?

 points.forEach((item) => {
   var d = Math.abs(item.x) + Math.abs(item.y);
   console.log(d);
   points.item.push('d: ' + d);
 });

3 个答案:

答案 0 :(得分:3)

尝试以下

var points = [{ id: 1, a: 0, b: 3 },{ id: 2, a: 4, b: -1 },{ id: 3, a: -1, b: 5 },{ id: 4, a: 41, b: 2 },{ id: 5, a: 69, b: 3 }];

points.forEach(o => o.d = Math.abs(o.a) + Math.abs(o.b));
console.log(points);

答案 1 :(得分:1)

@jcbridwe ,您可以在对象上使用assign()方法将源对象中的缺失属性添加到目标对象。

请查看以下代码。

  

http://rextester.com/EPHYV10615在线试用以下代码。

var points = [
  { id: 1, a: 0, b: 3 },
  { id: 2, a: 4, b: -1 },
  { id: 3, a: -1, b: 5 },
  { id: 4, a: 41, b: 2 },
  { id: 5, a: 69, b: 3 },
]

for(var index in points){
    var a = points[index].a;
    var b = points[index].b;

    Object.assign(points[index], {d: a+b});
}

console.log(points);

»输出

[ { id: 1, a: 0, b: 3, d: 3 },
  { id: 2, a: 4, b: -1, d: 3 },
  { id: 3, a: -1, b: 5, d: 4 },
  { id: 4, a: 41, b: 2, d: 43 },
  { id: 5, a: 69, b: 3, d: 72 } ]

答案 2 :(得分:0)

可变方法:

points.forEach(o => o.d = o.a + o.b);

不变的方法:

const newPoints = points.map(o => Object.assign({}, o, {d: o.a + o.b}))