js返回树形结构数据

/**
 * 树形结构转换
 * @param a
 * @param idStr
 * @param pidStr
 * @param chindrenStr
 * @returns {Array}
 */
function transData(a, idStr, pidStr, chindrenStr){
    let r = [], hash = {}, id = idStr, pid = pidStr, children = chindrenStr, i = 0, j = 0, len = a.length;
    for(; i < len; i++){
        hash[a[i][id]] = a[i];
    }
    for(; j < len; j++){
        let aVal = a[j], hashVP = hash[aVal[pid]];      //当前对象&pid对象
        if(hashVP){
            !hashVP[children] && (hashVP[children] = []);
            hashVP[children].push(aVal);
        }else{
            r.push(aVal);
        }
    }
    return r;
}
/**
 * 树形结构转换
 * @param a
 * @param idStr
 * @param pidStr
 * @returns {Array}
 */
function transData2Tree(a, idStr, pidStr) {
  var r = []
  var hash = {}
  var len = a.length
  for (var i = 0; i < len; i++) {
    hash[a[i][idStr]] = a[i]
  }
  for (var j = 0; j < len; j++) {
    var aVal = a[j]
    var hashVP = hash[aVal[pidStr]]
    if (hashVP) {
      (!hashVP.children) && (hashVP.children = [])
      hashVP.children.push(aVal)
    } else {
      r.push(aVal)
    }
  }
  return r
}

/**
 * 返回一个节点下的所有子孙节点
 */
function getChildren(arr, result, pid) {
  for (var i in result) {
    if (result[i].pid + '' === pid + '') {
      arr.push(result[i]._id + '')
      getChildren(arr, result, result[i]._id)
    }
  }
  return arr
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

谈谈你最熟悉的System.DateTime[上篇]

最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是如何有效地进行时间的处理以提供对跨时区的支持。对于一个分布式的应...

1799
来自专栏码匠的流水账

聊聊eureka的delta配置

eureka-client-1.8.8-sources.jar!/com/netflix/discovery/DiscoveryClient.java

401
来自专栏菩提树下的杨过

发布一个轻量级的滑块控件

比系统自带的组件体积要小很多,而且支持进度条显示(在做播放器时,显示缓冲进度很有用哦),另外也支持三角形的音量调整显示 使用示例: package { imp...

3338
来自专栏前端杂货铺

简单拖拽实现

拖拽的元素必须绝对定位。 在实际操作中,犯了一个简单的错误:   对于iframe元素的事件绑定,需要在src完全加载后进行绑定。 iframe.onload ...

2454
来自专栏ml

机器学习之决策树熵&信息增量求解算法实现

此文不对理论做相关阐述,仅涉及代码实现: 1.熵计算公式:              P为正例,Q为反例      Entropy(S)   = -PLog2(...

3186
来自专栏互联网杂技

JavaScript 常用方法总结

经常使用的 JS 方法,今天记下,以便以后查询 /* 手机类型判断 */ var BrowserInfo = { userAgent: navigator.us...

3365
来自专栏开发与安全

数据结构:栈的顺序存储结构

栈(stack)是限定在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,栈又称为后进先出(Las...

3316
来自专栏算法修养

浙江工业大学校赛 竹之书(大数,同余定理)

竹之书 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java...

2848
来自专栏女程序员的日常

STM8S——8位基本定时器(TIM4)

简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。 ? 主要功能: (1)8位向上计数的自动...

2001
来自专栏函数式编程语言及工具

FunDA(11)- 数据库操作的并行运算:Parallel data processing

   FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算。我们先重温一下fs2是如何实现并行运算的。我们用interleave、merge、eith...

1758

扫码关注云+社区