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

如何在JavaScript中一次性修改多层嵌套对象的同名键值

批量修改嵌套对象中所有指定键的值

针对你给出的嵌套对象,要把所有层级里的name键值统一改成nikhil,可以通过递归遍历对象的方式实现,具体方案如下:

原对象示例

let obj = { 
  name : "raj" , 
  age : 23 , 
  second : {
    name : "suraj" , 
    location : "mumbai" 
  } ,
  third : { 
    name : "arjun" , 
    age : 34 , 
    friend : {
      name : "pratik" , 
      status : "married" 
    } 
  } 
}

递归修改函数实现

function replaceAllName(targetObj) {
  // 遍历对象的每个属性
  for (const key in targetObj) {
    // 只处理对象自身的属性,跳过原型链上的属性
    if (targetObj.hasOwnProperty(key)) {
      // 如果当前属性值是对象且不为null,递归处理子对象
      if (typeof targetObj[key] === 'object' && targetObj[key] !== null) {
        replaceAllName(targetObj[key]);
      }
      // 匹配到name键时,修改值为nikhil
      if (key === 'name') {
        targetObj[key] = 'nikhil';
      }
    }
  }
}

// 调用函数修改原对象
replaceAllName(obj);

// 打印验证结果
console.log(obj);

补充说明

  • 这个函数会逐层遍历对象的所有属性,不管嵌套多少层,只要是对象类型的子属性就会递归进去处理。
  • 使用hasOwnProperty是为了避免遍历到对象原型链上的无关属性,保证只处理目标对象自身的键值对。
  • 上述代码会直接修改原对象,如果不想改动原对象,可以先对原对象做深拷贝,再修改拷贝后的对象:
// 简单深拷贝函数
function deepClone(obj) {
  if (typeof obj !== 'object' || obj === null) return obj;
  const clone = Array.isArray(obj) ? [] : {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }
  return clone;
}

// 拷贝后再修改,原对象不受影响
const newObj = deepClone(obj);
replaceAllName(newObj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:33:15