如何实现带参数的函数修改对象数组中指定对象的属性值?
修改数组中指定ID对象的属性值
首先修正你代码里的语法错误:对象的属性赋值必须用冒号:,而不是等号=,正确的数组定义如下:
let list = [ {name: "kyle", surname: "smith", age: 24, id: 0}, {name: "leyla", surname: "simpson", age: 21, id: 1}, {name: "sean", surname: "rogers", age: 27, id: 2} ];
接下来提供两种常用的函数实现方式:
方式一:原地修改原数组(直接更新对象)
这种方式会直接修改原数组中的目标对象,适合不需要保留原数组的场景:
function updateProductById(id, updates) { // 找到对应ID的对象 const targetItem = list.find(item => item.id === id); if (targetItem) { // 将更新属性合并到目标对象,覆盖原有属性,新增属性也会添加 Object.assign(targetItem, updates); } // 返回修改后的对象,未找到则返回undefined return targetItem; }
使用示例:
// 修改ID为1的对象的年龄,并新增性别属性 updateProductById(1, {age: 22, gender: "female"}); console.log(list); // 输出结果中,ID为1的对象会变成:{name: "leyla", surname: "simpson", age: 22, id: 1, gender: "female"}
方式二:返回新数组(不修改原数组,纯函数)
如果需要保留原数组,推荐这种纯函数写法,返回一个包含更新后对象的新数组:
function updateProductById(id, updates) { return list.map(item => { // 匹配到目标ID时,返回合并了更新属性的新对象 if (item.id === id) { return {...item, ...updates}; } // 未匹配的对象直接返回原引用 return item; }); }
使用示例:
const updatedList = updateProductById(0, {name: "Kyle", age: 25}); console.log(updatedList); // 新数组中ID为0的对象已更新 console.log(list); // 原数组保持不变
注意事项:
- 确保数组中对象的
id是唯一标识,否则find和map只会处理第一个匹配的对象 - 如果
updates包含目标对象原本没有的属性,会直接添加到对象中 - 如果不需要新增属性,可额外添加逻辑过滤
updates的属性(比如只保留原对象存在的键)
内容的提问来源于stack exchange,提问作者DeWittz
相关产品推荐
相关产品推荐

