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

如何修复JavaScript递归遍历对象替换值时嵌套字段不生效的问题

问题原因
  • 递归处理嵌套子对象时,你没有接收demoD(obj[key], toChange, newV)的返回值,处理后的新子对象直接被丢弃,后续给acc[key]赋值时用的还是原始未修改的子对象,所以嵌套层级的字段替换不会生效。
  • 额外隐藏问题:typeof null返回值为object,如果对象中存在值为null的字段,原有判断逻辑会把null当成对象触发递归,导致运行报错。
修复方案

将递归调用返回的新子对象赋值给对应key,同时补充null排除判断即可,修复后代码如下:

const demoD = (
  obj,
  toChange,
  newV,
) => {
  return Object.keys(obj).reduce((acc, key) => {
    const currentVal = obj[key]
    // 仅对非null的对象做递归处理
    if (typeof currentVal === 'object' && currentVal !== null) {
      acc[key] = demoD(currentVal, toChange, newV)
    } else {
      acc[key] = currentVal === toChange ? newV : currentVal
    }
    return acc
  }, {})
}

const obj = {
  name: '',
  age: '687',
  demo: {
    test: ''
  }
}

console.log(demoD(obj, '', null))

运行后输出结果符合预期:

{
  name: null,
  age: '687',
  demo: {
    test: null
  }
}

内容的提问来源于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:45:01