zTreeソートアルゴリズム

2052 ワード

htmlファイルを作成します.コードは次のとおりです.


 
   ZTREE DEMO 
  
  
  
 



nodelist=
[
 { id:1, pId:0, name:"   1 "},
 { id:11, pId:1, name:"   11 "},
 { id:111, pId:11, name:"    111"},
 { id:112, pId:11, name:"    112"},
 { id:113, pId:11, name:"    113"},
 { id:114, pId:11, name:"    114"},
 { id:12, pId:1, name:"   12"},
 { id:121, pId:12, name:"    121"},
 { id:122, pId:12, name:"    122"},
 { id:123, pId:12, name:"    123"},
 { id:124, pId:12, name:"    124"},
 { id:13, pId:1, name:"   13 "},
 { id:2, pId:0, name:"   2"},
 { id:21, pId:2, name:"   21"},
 { id:211, pId:21, name:"    211"},
 { id:212, pId:21, name:"    212"},
 { id:213, pId:21, name:"    213"},
 { id:214, pId:21, name:"    214"},
 { id:22, pId:2, name:"   22 "},
 { id:221, pId:22, name:"    221"},
 { id:222, pId:22, name:"    222"},
 { id:223, pId:22, name:"    223"},
 { id:224, pId:22, name:"    224"},
 { id:23, pId:2, name:"   23"},
 { id:231, pId:23, name:"    231"},
 { id:232, pId:23, name:"    232"},
 { id:233, pId:23, name:"    233"},
 { id:234, pId:23, name:"    234"},
 { id:3, pId:0, name:"   3 "}
];

var key='id',parentKey='pId',childKey='children';
//    
function reconstruction(sNodes){
  var r = [];
  var tmpMap = {};
    
  //       map   
  for (i = 0, l = sNodes.length; i < l; i++) {
     // key     "id"  , value      
      tmpMap[sNodes[i][key]] = sNodes[i];
  }
    
 //  ,       
  for (i = 0, l = sNodes.length; i < l; i++) {
      //              ,                      
      if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
          if (!tmpMap[sNodes[i][parentKey]][childKey])
              tmpMap[sNodes[i][parentKey]][childKey] = [];
          tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
      } else {
         //                  
          r.push(sNodes[i]);
      }
  }
  return r;
}

console.log(reconstruction(nodelist))