将递增ID添加到数组中的obj

时间:2018-02-23 11:11:07

标签: javascript arrays object for-loop foreach

尝试为数组中的每个对象添加ID。如果id已存在,则id将递增1,尝试获取自动递增函数。问题是,使用此函数,每个对象在为每个语句运行for循环时获取相同的ID,或者如果循环在外部运行,则无法读取obj.id of undefined

function addId(arr, obj) {
  obj.id;
  arr.forEach(function(obj) {
    obj.id = 0;
    return obj.id;
  });
  for(var i = 0; i <= arr.length; i++) {
    if(obj.id == obj.id) obj.id++;
  }
};

1 个答案:

答案 0 :(得分:4)

您的代码存在一些问题。首先obj.id;没有做任何事情。所以你应该摆脱它。同样在你forEach内,您将值0指定为每个对象的ID,但在第二个循环中,您要检查obj的ID是否为{传入时作为参数与其自身相同,因此检查将始终生成true,然后您将递增传入的obj的ID。

因此,在将id属性设置为0后,您永远不会操纵数组中的对象。

您可以使用索引作为id的值。

此外,如果需要,您可以考虑使用Object.assign之类的内容来防止更改数组中的原始对象。

&#13;
&#13;
function addId(arr) {
  return arr.map(function(obj, index) {
    return Object.assign({}, obj, { id: index });
  });
};

// test
const input = [ { a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }];
const output = addId(input);

console.log(output);
&#13;
&#13;
&#13;