我有以下对象
let obj = {children:[
{
ID:1,
clicked: false,
children: [
{
ID:4,
clicked: false,
children: [
{
ID:11,
clicked: false,
children: [
{
ID:14,
clicked: true,
},
{
ID:15,
clicked: false,
}
]
},
{
ID:12,
clicked: false,
}
]
},
{
ID:5,
clicked: false,
}
]
}
]
}
我需要将父项的 clicked 属性更改为 true。所以在这种情况下,ID - 14 已将 clicked 属性设置为 true。因此,ID 为 11,4,1 的 parent 也将拥有相同的属性 true。
据我了解,将应用 DFS。 我尝试了以下代码,但并非在所有情况下都有效
function reverseIt(obj) {
if(obj.children == undefined) {
return obj.clicked;
}
for(i = 0; i < obj.children.length; i++) {
if(!obj.children[i].clicked) {
obj.children[i].clicked = reverseIt(obj.children[i]);
}
return obj.children[i].clicked;
}
return true;
}
reverseIt(obj);
最佳答案
尝试
let reverseIt = o=> o.children ?
o.clicked=o.children.reduce((a,c)=>a||o.clicked||reverseIt(c),!1) : o.clicked;
let obj={children:[{ID:1,clicked:false,children:[{ID:4,clicked:false,children:[{ID:11,clicked:false,children:[{ID:14,clicked:true},{ID:15,clicked:false}]},{ID:12,clicked:false}]},{ID:5,clicked:false}]}]};
let reverseIt = o=> o.children ? o.clicked=o.children.reduce((a,c)=>a||o.clicked||reverseIt(c),!1) : o.clicked;
// TEST
reverseIt(obj);
console.log(obj);
关于javascript - 通过js中的递归调用更改树结构数据中的父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55685095/