如何用JavaScript为每个嵌套对象添加新的键值对?
给嵌套JavaScript对象的每个层级添加指定键值对
要实现给嵌套对象的每一层都新增id: 1的键值对,我们可以写一个递归函数遍历对象的所有层级,逐个处理每个对象:
实现代码
function addKeyToNestedObjects(obj, key, value) { // 非对象或null直接返回原值 if (typeof obj !== 'object' || obj === null) { return obj; } // 创建新对象,先插入指定键值对 const newObj = { [key]: value, ...obj }; // 遍历属性,递归处理嵌套对象 for (const prop in newObj) { if (Object.prototype.hasOwnProperty.call(newObj, prop)) { newObj[prop] = addKeyToNestedObjects(newObj[prop], key, value); } } return newObj; } // 输入对象 const obj = { name: { final: { val: 'yes' } } }; // 调用函数添加id:1 const outObj = addKeyToNestedObjects(obj, 'id', 1); console.log(outObj);
输出结果
{ id: 1, name: { id: 1, final: { id: 1, val: 'yes' } } }
代码说明
- 先判断当前值是否为有效对象,非对象直接返回,避免递归出错
- 用展开运算符创建新对象,不会修改原输入对象,避免副作用
- 递归遍历每个属性,对嵌套的子对象重复执行添加键值的操作
- 可通过修改
key和value参数,灵活添加不同的键值对,不止局限于id:1
内容的提问来源于stack exchange,提问作者Sanjay
相关产品推荐
相关产品推荐

