我有这个对象数组
[
{
"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
)
我为了循环而不是正常映射的原因是我不想改变原始人物对象,这是正确的吗?
答案 0 :(得分:2)
问题在于,当您使用Array.map
循环遍历数组时,您访问并更新年龄的对象仍然是原始对象,并将完全相同的对象推送到{{1}的新数组创造。
因此,解决此问题的直观方法是克隆新对象并更新新对象。我为你做了example所以你可以看到结果。
Array.map
答案 1 :(得分:0)
如果您希望原始数组保持不变并使用更新的对象创建一个新数组,请尝试以下操作:
var person = [
{
"name": "Alice",
"age": 10
},
{
"name": "Samantha",
"age": 20
},
{
"name": "Mary",
"age": 19
}
];
const newage = 11;
var newPerson = [];
for (var i = 0; i<person.length; i++){
var ageVal = person[i].name == 'Alice' ? newage : person[i].age;
newPerson.push({name: person[i].name, age: ageVal});
}
console.log('Original person object:');
console.log(person);
console.log('Modified newPerson object:');
console.log(newPerson);