ES6 递归添加属性到多层嵌套对象 - 详细教程
假设我们有一个对象如下:
const obj = {
name: 'obj',
children: [
{
name: 'child1',
children: [
{
name: 'grandchild1',
children: []
},
{
name: 'grandchild2',
children: []
}
]
},
{
name: 'child2',
children: [
{
name: 'grandchild3',
children: []
}
]
}
]
};
我们可以使用递归函数来实现将每一层对象增加一个属性的需求:
function addProp(obj) {
obj.prop = 0; // 添加属性
if (obj.children && obj.children.length > 0) { // 如果有 children
obj.children.forEach(child => { // 遍历 children
addProp(child); // 递归调用 addProp
if (child.children && child.children.length > 0) { // 如果 child 有 children
child.children.forEach(grandchild => { // 遍历 grandchild
addProp(grandchild); // 递归调用 addProp
});
}
});
}
}
addProp(obj);
console.log(obj);
输出结果为:
{
name: 'obj',
children: [
{
name: 'child1',
children: [
{
name: 'grandchild1',
children: [],
prop: 0
},
{
name: 'grandchild2',
children: [],
prop: 0
}
],
prop: 0
},
{
name: 'child2',
children: [
{
name: 'grandchild3',
children: [],
prop: 0
}
],
prop: 0
}
],
prop: 0
}
可以看到,每一层的对象都增加了一个属性 prop,其值为 0。如果该对象有 children,则其 children 中的每一个对象也会增加该属性。如果该对象的 children 中的对象还有 children,则其 children 中的每一个对象也会增加该属性。这样就实现了将每一层对象增加一个属性的需求。
原文地址: https://www.cveoy.top/t/topic/oPdM 著作权归作者所有。请勿转载和采集!