提问人:Sanjay 提问时间:4/7/2023 更新时间:4/7/2023 访问量:133
想要使用 JavaScript 在每个嵌套对象中添加新的键值
Want to add new key value in each nested object with JavaScript
问:
我有一个嵌套的 JavaScript 对象,我想在每个嵌套对象中添加新的键值。所以基本上我必须创建自定义函数来添加它。
**我的输入对象: **
const obj = {
name: {
final: {
val: 'yes'
}
}
}
**预期对象: **
const outObj = {
id: 1,
name: {
id: 1,
final: {
id: 1,
val: 'yes'
}
}
}
答:
0赞
protob
4/7/2023
#1
你可以递归函数和reduce来得到输出:
const obj = {
name: {
final: {
val: 'yes'
}
}
};
const addId = (obj, id = 1) => Object.entries(obj).reduce((acc, [key, val]) => {
acc.id = id;
acc[key] = (typeof val === 'object' && val !== null) ? addId(val, id ) : val;
return acc;
}, {});
const outObj = addId(obj);
console.log(outObj)
0赞
epascarello
4/7/2023
#2
解决方案是基本递归。你弄清楚对象的任何属性是否是一个对象,然后你遍历该对象,依此类推。
const obj = {
name: {
final: {
val: 'yes'
}
}
}
const obj2 = {
name: {
final: {
val: 'yes',
age: 22,
address: {
city: 'Noida',
age: 23
}
},
age: 18
},
age: 20
}
const addKey = (obj, key, value) => {
Object.values(obj).forEach(val => {
if (val && typeof val === 'object') addKey(val, key, value);
});
obj[key] = value;
}
addKey(obj, 'id', 1);
addKey(obj2, 'id', 2);
console.log(obj);
console.log(obj2);
评论
0赞
Sanjay
4/7/2023
嗨,感谢您的回答!它有效,但使用不同的测试用例它不起作用。const obj = { name: { final: { val: 'yes', age: 22, address: { city: 'Noida', age: 23 } }, age: 18 }, age: 20 } 你能检查一下这个吗?
0赞
epascarello
4/7/2023
那个物体对我来说看起来不错。
评论