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 条评论
登录 后参与评论

相关文章

来自专栏恰同学骚年

剑指Offer面试题:27.最小的k个数

  这道题是典型的TopK问题,其最简单的思路莫过于把输入的n个整数排序,排序之后位于最前面的k个数就是最小的k个数。这种思路的时间复杂度是O(nlogn),但...

622
来自专栏ml

HDUOJ---2152

Fruit Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav...

2596
来自专栏owent

POJ PKU 1065 Wooden Sticks 3636 Nested Dolls 解题报告

题目链接:[http://acm.pku.edu.cn/JudgeOnline/problem?id=3636

741
来自专栏跟着阿笨一起玩NET

DataGridView绑定BindingList<T>带数据排序的类

本文章转载:http://yuyingying1986.blog.hexun.com/30905610_d.html

321
来自专栏数说工作室

统计师的Python日记【第4天:欢迎光临Pandas】

本文是【统计师的Python日记】第4天的日记 回顾一下: 第1天学习了Python的基本页面、操作,以及几种主要的容器类型; 第2天学习了python的函数、...

3609
来自专栏mathor

回文自动机、AC自动机和后缀自动机介绍(2)

 AC自动机,有的地方也叫Trie图,可以用来解决多串匹配的问题  多串匹配是这样一个问题:给定N个敏感词W1, W2, W3, … WN,然后对于一个字符串...

1192
来自专栏java学习

面试题14(下列的哪个选项可以用八\\进制正确表示数字8)

下列的哪个选项可以用八进制正确表示数字8 A)0x8 B)0×10 C)08 D010 考点:该面试题主要考察求职者对Java语言中进制的了解 出现频率:★★★...

2524
来自专栏木宛城主

浪客剑心:位图法Bitmap算法分析

看了一篇文章《一道腾讯前端试题,谁来试试身手》,正好以前了解过位图法,确实不错。位图法适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不...

2276
来自专栏懒人开发

(7.5)James Stewart Calculus 5th Edition:Strategy for Integration

我们之前接触的,都是基础函数,也就是 elementary function 就是由我们前面说过的 三角函数,幂函数,指数函数,对数函数,有理函数等组合成的函...

975
来自专栏Crossin的编程教室

【每周一坑】验证哥德巴赫猜想

哥德巴赫在 1742 年给欧拉的信中提出了以下猜想:任一大于 2 的整数都可写成三个质数之和。(因现今数学界已经不使用“1 也是质数”这个约定,原初猜想的现代陈...

3329

扫码关注云+社区