技术解析

js 树向上递归修改数据 有什么好的写法呢!
0
2021-08-26 05:29:35
idczone
let a = [
  {
    key: 1,
    title: '一级',
    parentKey: 0,
    status: {choose: false},
    children: [
      {
        key: 10, title: '一级-0', parentKey: 1, status: {choose: false}, children: [
          {key: 15, title: '一级-0-1', parentKey: 10, status: {choose: false}}
        ]
      },
      {key: 11, title: '一级-1', parentKey: 1, status: {choose: false}},
      {key: 12, title: '一级-2', parentKey: 1, status: {choose: false}},
      {key: 13, title: '一级-3', parentKey: 1, status: {choose: false}},
      {key: 14, title: '一级-4', parentKey: 1, status: {choose: false}}
    ]
  }
];

我想修改 key 15 每个父级 status 里的 choose 状态。 也就是 key 10 key 的 status choose 都为 true 如果是 json 对象很好找,但是已经是树形了向下好找却向上不好找!怎么更优的实现它呢!


直接判断当前节点的子节点是否包括 key15

提前把祖先存下来呗
https://runkit.com/muzea/5d826fe387ee180014a5d330

把对象展平就很容易寻址
https://codepen.io/autoxbc/pen/xxKyWmq

```
let parent = (data, obj) => {
data.forEach(item => {
if (item.key === obj.parentKey) {
item.status.choose = true;
parent(data, item);
}
if (item.children && item.children.length) {
item.status.choose = true;
parent(item.children, obj);
}
});
};
let obj = { key: 15, title: '一级-0-1', parentKey: 10, status: { choose: false } };
console.log(a);
```

学习了

改一下数据结构,用一个表型结构来存储所有选项的数据,然后再用类似的树形结构来存储层级。


学习了!
感觉有点 B+树的意思哈[这句我瞎说的]

可以获取数据后先给每个节点赋值一个 parent 对象,从下到上就好处理了:
treeWalk(node) {
for (let child of node.children) {
child.parent = node;
treeWalk(child);
}
}

老哥的代码风格,有点迷

for 绕了点?在真值判断处赋值可能不合规范,不过很好用,也是链式查找的范式写法

是的 for 的很骚气,看了半天,可能我比较菜吧 哈哈

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服