遍历树结构的方法

178 阅读1分钟
  1. 采用递归
// 检查所有的已选
        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使用

  1. 使用栈堆处理
// 检查所有的已选
        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()方法