Javascript 使用es6映射根据属性值更新对象数组
我有这个对象数组Javascript 使用es6映射根据属性值更新对象数组,javascript,ecmascript-6,Javascript,Ecmascript 6,我有这个对象数组 [ { "name": "Alice", "age": 10 }, { "name": "Samantha", "age": 20 }, { "name": "Mary", "age": 19 } ] 如何将Alice的年龄更新到11岁 我试着使用es6地图 const newage = 11; const newDate = person.map(obj => return 'Al
[
{
"name": "Alice",
"age": 10
},
{
"name": "Samantha",
"age": 20
},
{
"name": "Mary",
"age": 19
}
]
如何将Alice的年龄更新到11岁
我试着使用es6地图
const newage = 11;
const newDate = person.map(obj =>
return 'Alice' === obj.name ? obj.age= newage : obj
)
我之所以选择map而不是normal for loop,是因为我不想改变原始的person对象,对吗?问题是,当您使用array.map在数组中循环时,访问和更新年龄的对象仍然是原始对象,然后将完全相同的对象推送到
array.map
创建的新数组中
所以解决这个问题的直观方法是克隆新对象并更新新对象。我为你做了一个测试,这样你就可以看到结果了
const original = [
{"name": "Alice","age": 10},
{"name": "Samantha","age": 20},
{"name": "Mary","age": 19}
];
const newage = 11;
const newData = original.map(obj => {
// clone the current object
const newObj = Object.assign({}, obj);
// update the new object
if (newObj.name === 'Alice') newObj.age = newage;
return newObj;
});
“正确吗?”No..map
将创建一个新数组,但obj.age=newage
仍将变异对象<代码>.map在ES6 btw之前已经存在。