You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带参数的函数修改对象数组中指定对象的属性值?

修改数组中指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:22:33