判断叶子节点

//测试数据
data = [{
                      nodeId: "1",
                      parentId: "0",
                      text: "法务部",
                      childList:[{
                          nodeId: "12",
                          parentId: "1",
                          text: "111",
                      },{
                          nodeId: "13",
                          parentId: "1",
                          text: "222",
                      }]
                   },{
                      nodeId: "2",
                      parentId: "0",
                      text: "法务部2",
                      childList:[{
                          nodeId: "22",
                          parentId: "2",
                          text: "111222",
                      },{
                          nodeId: "23",
                          parentId: "2",
                          text: "22222",
                      }]
                   }]
  






//问题:点击一级节点不会返回节点信息,需修改(A)处


function
validateLeaf(data){ console.log(data,'1099') let value = data.value, dicData = data.column.dicData; //console.log(value,'val--->>>>>') //check(dicData,value) console.log(check(dicData,value),'nodexxx') function check(arr,value){ //debugger console.log(arr,'arrrr') var selectNode = null let result = arr.find(ele => { //debugger //if(check(ele,value)) console.log(ele,'eleeee') if(ele.childList){ console.log(value,'value---') if(check(ele.childList,value)) selectNode = check(ele.childList,value) return check(ele.childList,value) //(A) } console.log(ele.nodeId,value,'201999') if(ele.nodeId === value) { debugger selectNode = ele console.log(selectNode,'selectNode') } return ele.nodeId === value }) console.log(selectNode,'result111111') return selectNode } }   

修改返回一级节点问题:

function validateLeaf(data){
        return new Promise((resolve,reject)=>{
           console.log(data,'1099')
            let value = data.value,
                dicData = data.column.dicData;
            //console.log(value,'val--->>>>>')
            //check(dicData,value)
            console.log(check(dicData,value),'nodexxx')
            let selectNode = check(dicData,value);
            if(selectNode.childList){
                //alert('档案分类必须最小分类')
                reject()
            }else{
                resolve()
            }
        })
          
          function check(arr,value){
             //debugger
             var selectNode = null
             let result = arr.find(ele => {
                  //debugger
                  //if(check(ele,value)) 
                  if(ele.childList){ 
                        if(check(ele.childList,value)){
                           selectNode = check(ele.childList,value)
                           return check(ele.childList,value)
                        } 
                  }
                  if(ele.nodeId === value) {
                     selectNode = ele
                  }
                  return ele.nodeId === value
              })
              return selectNode
          }
      }

扁平化:

var arr=[1,2,[3,4,[5,6,7]],9,[10,11]]

// 1) 方法一  循环数组+递归调用
function steamroller (arr){
  // 1.创建一个新数组,保存扁平后的数据
  var newArr=[];
  // 2.for循环原数组
  for(var i=0;i<arr.length;i++){
    if(Array.isArray(arr[i])){
      // 如果是数组,调用steamroller 将其扁平化
      // 然后在push 到newArr中
      newArr.push.apply(newArr,steamroller(arr[i]))
    }else {
      // 反之 不是数组,直接push进newArr
      newArr.push(arr[i])
      console.log(newArr,'AA')
    }
  }
  // 3.返回新的数组
  console.log(newArr,'BB')
  return newArr
}
console.log(steamroller(arr)) // [ 1, 2, 3, 4, 5, 6, 7, 9, 10, 11 ]

执行顺序:

[1] "AA"
VM307:16 (2) [1, 2] "AA"
VM307:16 [3] "AA"
VM307:16 (2) [3, 4] "AA"
VM307:16 [5] "AA"
VM307:16 (2) [5, 6] "AA"
VM307:16 (3) [5, 6, 7] "AA"
VM307:20 (3) [5, 6, 7] "BB"
VM307:20 (5) [3, 4, 5, 6, 7] "BB"
VM307:16 (8) [1, 2, 3, 4, 5, 6, 7, 9] "AA"
VM307:16 [10] "AA"
VM307:16 (2) [10, 11] "AA"
VM307:20 (2) [10, 11] "BB"
VM307:20 (10) [1, 2, 3, 4, 5, 6, 7, 9, 10, 11] "BB"
VM307:23 (10) [1, 2, 3, 4, 5, 6, 7, 9, 10, 11]
原文地址:https://www.cnblogs.com/thing/p/11756951.html