如何在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
相关产品推荐
相关产品推荐

