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

JavaScript中按条件修改对象属性值返回空对象如何修复

问题原因

你的代码存在两处逻辑错误:

  1. 条件判断逻辑错误:你传入的第二个参数toChange是要修改的键名,但判断逻辑写的是obj[key] === toChange(判断属性值等于键名),示例中obj.name的值是carl,和传入的'name'永远不相等,因此不会执行赋值逻辑。
  2. 未保留不匹配的属性:reduce的逻辑里只有条件匹配时才会给累加对象acc新增属性,不匹配的属性会直接丢失,就算条件写对也拿不到完整对象。

修复后的代码

const obj = {
  name: 'carl',
  age: 2
};

const filterF = (obj, toChange, newV) => {
  return Object.keys(obj).reduce((acc, key) => {
    // 先保留原对象所有属性
    acc[key] = obj[key];
    // 匹配到目标键时更新对应值
    if (key === toChange) {
      acc[key] = newV;
    }
    return acc
  }, {})
}


console.log(filterF(obj, 'name', 'newName'))
// 输出 { name: 'newName', age: 2 }

更简洁的实现

如果不需要兼容老旧运行环境,直接用对象展开语法实现更易读:

const filterF = (obj, toChange, newV) => {
  return {
    ...obj,
    [toChange]: newV
  }
}

内容的提问来源于stack exchange,提问作者Asking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:21:02