使用.map()向JS对象添加递增值

时间:2017-12-20 13:49:29

标签: javascript

我想知道是否可以使用.map()动态更改JS对象的附加值。

例如,静态使用.map()允许向数组的所有对象添加类似的ID。

friends = [
          {
            "age": 10,
            "name": "Castillo"
          },
          {
            "age": 11,
            "name": "Daugherty"
          },
          {
            "age": 12,
            "name": "Travis"
          }
        ]

// Static mapping --> adds 1 to all objects
friends_static=friends;
friends.map(elem => elem["id"] = 1);
console.log(friends_static)

这会返回[{age=10, name="Castillo", id=1}, {age=11, name="Daugherty", id=1}, {age=12, name="Travis", id=1}]

是否可以以类似的方式为每个对象添加一个增量为1的唯一ID?

比照。下面的说明性JSfiddle和示例代码。我知道1++不合法,但只是展示了我想要实现的想法。

//Dynamic mapping? --> should add 1,2,3...to objects incrementally
/*
friends_dynamic=friends;
friends.map(elem => elem["id"] = 1++);
console.log(friends_dynamic)
*/

这应该返回[{age=10, name="Castillo", id=1}, {age=11, name="Daugherty", id=2}, {age=12, name="Travis", id=3}]

4 个答案:

答案 0 :(得分:6)

这是你的意思吗?



const friends = [
    {
        "age": 10,
        "name": "Castillo"
    },
    {
        "age": 11,
        "name": "Daugherty"
    },
    {
        "age": 12,
        "name": "Travis"
    }
]

friends.forEach((friend, index) => friend.id = index + 1);

console.log(friends)




答案 1 :(得分:5)

您可以使用提供给index回调的Array#map

friends.map((friend, index) => Object.assign({}, friend, { id: index + 1 }))

Array#map中改变对象并不是一个好主意。该方法的整个目的是返回从原始对象映射的新对象。因此,使用Object.assign来避免变异。

当然,如果您想要变异,那么只需使用forEach而不映射到新值。在这种情况下,它会更“语义正确”。

答案 2 :(得分:2)

如果你只需要从0开始的增量值,你可以简单地使用一个计数器并递增它,如下所示:

let id = 1;
friends.map(elem => {elem.id = id++;});

答案 3 :(得分:1)

使用局部变量并递增它。根据方法definition “map()方法按顺序为数组中的每个元素调用提供的函数。”按顺序将确保ID不会发生冲突。

friends = [
      {
        "age": 10,
        "name": "Castillo"
      },
      {
        "age": 11,
        "name": "Daugherty"
      },
      {
        "age": 12,
        "name": "Travis"
      }
    ]

// Static mapping --> adds 1 to all objects
friends_static=friends;
var i = 1;
friends_static.map(elem => elem["id"] = i++);
console.log(friends_static)

//Dynamic mapping? --> should add 1,2,3...to objects incrementally
/*
friends_dynamic=friends;
friends_dynamic.map(elem => elem["id"] = 1++);
console.log(friends_dynamic)
*/