js将平铺的对象数组转换成树形结构


树形结构常用于省、市、县、区的层级展示,会计科目层级展示,机构树,菜单权限等

转成树形结构的数据中需要包含当前节点id,以及父级节点id---(pid或parentId)

具体实现方法如下:

function treeDataTranslate(data, id = "id", pid = 'parentId') {
  // console.log("treeDataTranslate---", data);
  if (data.length === 0) return []
  var res = []
  var temp = {}
 
  for (var i = 0; i < data.length; i++) {
    // 如果id以010102形式保存,并且没有pid,可以放开下面if语句
    // if (data[i].id.length - 2 > 0) {
      // data[i].pid = data[i].id.substr(0, data[i].id.length - 2)
    // }
 
    temp[data[i][id]] = data[i]
  }
 
  for (var k = 0; k < data.length; k++) {
    if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
      if (!temp[data[k][pid]]['children']) {
        temp[data[k][pid]]['children'] = []
      }
      if (!temp[data[k][pid]]['_level']) {
        temp[data[k][pid]]['_level'] = 1
      }
      data[k]['_level'] = temp[data[k][pid]]._level + 1
      temp[data[k][pid]]['children'].push(data[k])
    } else {
      res.push(data[k])
    }
  }
  // console.log("res---", res, temp);
  return res
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM