
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 对象很好找,但是已经是树形了向下好找却向上不好找!怎么更优的实现它呢!
1 lemontv 2019 年 9 月 19 日 via Android 直接判断当前节点的子节点是否包括 key15 |
2 azh7138m 2019 年 9 月 19 日 |
3 autoxbc 2019 年 9 月 19 日 |
4 coderabbit OP ``` 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); ``` |
5 coderabbit OP |
6 Sczlog 2019 年 9 月 19 日 改一下数据结构,用一个表型结构来存储所有选项的数据,然后再用类似的树形结构来存储层级。 |
8 jorneyr 2019 年 9 月 19 日 可以获取数据后先给每个节点赋值一个 parent 对象,从下到上就好处理了: treeWalk(node) { for (let child of node.children) { child.parent = node; treeWalk(child); } } |