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-09-19 00:33:39 +08:00 via Android
直接判断当前节点的子节点是否包括 key15
|
2
azh7138m 2019-09-19 02:02:33 +08:00 2
|
3
autoxbc 2019-09-19 02:17:28 +08:00 1
|
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-09-19 09:17:30 +08:00
改一下数据结构,用一个表型结构来存储所有选项的数据,然后再用类似的树形结构来存储层级。
|
8
jorneyr 2019-09-19 12:34:39 +08:00
可以获取数据后先给每个节点赋值一个 parent 对象,从下到上就好处理了:
treeWalk(node) { for (let child of node.children) { child.parent = node; treeWalk(child); } } |