javascript - 通过js中的递归调用更改树结构数据中的父属性

标签 javascript arrays algorithm object tree

我有以下对象

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/

相关文章:

python - Python 中的对象数组

c - 为什么这个阶乘算法不准确

algorithm - 多边形算法

c++ - 具有多个约束条件(例如重量,体积等)的背包

javascript - 如何将数字保存到 localStorage 中,每次用户输入新数字时该数字都会递增?

javascript - UIkit3 : to confirm user input in UIkit. modal.prompt 使用 UIkit.modal.confirm

java - 在java中将两个字节转换为有符号整数

javascript - 如果在 javascript 数组中找不到输入的值,如何获取警报消息

javascript - 单击 <svg> 元素上的处理程序

javascript - 为什么我在 React 应用程序中失去了登录信息?