慕雪6442864
需求就是遍历所有树节点,需要用到递归,解决代码如下(底部有附上测试数据arr)。另,需求要求从下往上找,其实从上往下找效率是一样,都是要遍历到每个节点,除非你还有其它需求点。 function checkNode(node) { if (node.child && node.child.length > 0) {//有child的节点才需要check验证 var nodeIsCheck = true; for (var i = node.child.length - 1; i >= 0; i--) { var subNode = node.child[i]; if (subNode.child && subNode.child.length > 0) { checkNode(subNode); } nodeIsCheck = nodeIsCheck && subNode.check; //if (!nodeIsCheck) { // //注意:如果有子节点是false,则说明当前节点就是false,此时也不能直接break跳出循环, // //因为要继续递归check验证其它有子节点的子节点 //} } node.check = nodeIsCheck; } } //checkNode是从根节点开始递归,如果arr是个数组,则就要遍历去调用。 for (var j = arr.length - 1; j >= 0; j--) { checkNode(arr[j]); } 附上我测试的数据arr: var arr = [ { check: false, child: [ { check: false, child: [ { check: true, }, { check: true } ] }, { check: false, child: [ { check: true, }, { check: false, } ] }, { check: true, child: [ { check: true, }, { check: true, child: [ { check: true, }, { check: false, } ] }, { check: true, } ] } ] } ]