问题描述
- 如果所有单击的子项都为True,则需要将父项的Clicked属性更改为True。因此,在本例中,ID-14,15是将CLICKED属性设置为True。因此,ID 11被点击的父母必须成为真的。
- 如果11、12、14、15为真,则必须使4为真。
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: true, } ] }, { ID:12, clicked: false, } ] }, { ID:5, clicked: false, } ] } ] }
推荐答案
Nina很好地回答了您何时要更改输入。
下面是一个创建新对象的简单方法:
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">const consolidate = ({clicked, children = [], ...rest}, _, __, kids = children .map (consolidate)) => ({ ...rest, clicked: clicked || (kids .length > 0) && kids .every (k => k .clicked), ...(kids .length ? {children: kids} : {}) }) const obj1 = {children: [{ID: 1, clicked: false, children: [{ID: 4, clicked: false, children: [{ID: 11, clicked: false, children: [{ID: 14, clicked: true}, {ID: 15, clicked: true}]}, {ID: 12, clicked: false}]}, {ID: 5, clicked: false}]}]}; // with 12 switched to `true` const obj2 = {children: [{ID: 1, clicked: false, children: [{ID: 4, clicked: false, children: [{ID: 11, clicked: false, children: [{ID: 14, clicked: true}, {ID: 15, clicked: true}]}, {ID: 12, clicked: true}]}, {ID: 5, clicked: false}]}]}; console .log ('obj1', consolidate (obj1)) console .log ('obj2', consolidate (obj2))
.as-console-wrapper {max-height: 100% !important; top: 0}