我想知道是否可以使用.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}]
是否可以添加一个唯一的ID,以类似的方式为每个对象增加1?
参看下面的说明性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}]
你是这个意思吗?
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)
你可以使用提供给index
回调的Array#map
:
friends.map((friend, index) => Object.assign({}, friend, { id: index + 1 }))
改变Array#map
中的对象并不是一个好主意。该方法的整个目的是返回从原始对象映射的新对象。因此,使用Object.assign
来避免突变。
当然,如果你想要变异,那么只需使用forEach
而不映射到新值。在这种情况下,它将更“语义正确”。
如果你只需要从0开始的增量值,你可以简单地使用一个计数器并递增它,如下所示:
let id = 1;
friends.map(elem => {elem.id = id++;});
使用局部变量并递增它。按照方法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)
*/