- 采用递归
// 检查所有的已选
checkAllCheck (node) {
if (node.children.every(item => item.isCheck === true)) {
// 如果有树状的的要判断字节点有没勾上
for(let item of node.children) {
if (item.children && item.children.length && !this.checkAllCheck(item)) {
return false
}
}
return true
} else {
// 父节点都没勾上就返回false
return false
}
}
涉及知识点:for of使用
- 使用栈堆处理
// 检查所有的已选
checkAllCheck (node) {
// 堆栈
// 将数组复制一份
let newStack = [...node.children]
while (newStack && newStack.length !== 0) {
let pop = newStack.pop()
// 验证最后一个元素
if (pop.isCheck) {
if (pop.children && pop.children.length) {
// 将子元素推到验证栈
Array.prototype.push.apply(newStack, pop.children)
}
} else {
return false
}
}
return true
}
涉及知识点:数组添加多个元素 Array.prototype.push.apply(targetArr, addArr),数组pop()方法