js将json数组转成tree对象

昨天遇到一道面试题,手写js将json数组转成tree对象,昨天写错了,今天特意想了下,思路其实挺简单,循环+递归,获取子节点对象。

1 let data = [
2     {‘parent_id‘: 0, ‘id‘: 1, ‘value‘: ‘XXX‘},
3     {‘parent_id‘: 1, ‘id‘: 3, ‘value‘: ‘XXX‘},
4     {‘parent_id‘: 4, ‘id‘: 6, ‘value‘: ‘XXX‘},
5     {‘parent_id‘: 3, ‘id‘: 5, ‘value‘: ‘XXX‘},
6     {‘parent_id‘: 2, ‘id‘: 4, ‘value‘: ‘XXX‘},
7     {‘parent_id‘: 1, ‘id‘: 2, ‘value‘: ‘XXX‘},
8 ]

主要方法如下,使用的是es6语法

 1 let toTree = (arr, key = ‘id‘, pkey = ‘pid‘, children=‘children‘) => {
 2      if(arr.length === 0){
 3          return {}
 4      }
 5      return getChildren(arr, 0) // 此处的0代表根节点,如有的根节点标识符为‘#‘,那么此处则为‘#‘
 6
 7    // 主要原理是通过查找父节点parent_id为pid的对象,再一层一层往下查找子节点id,看是否存在parent_id等于id的对象
 8      function getChildren(arr, pid) {
 9          let temp = {}
10         arr.forEach(v => {
11             if(v[pkey] === pid){
12                 temp[v[key]] = {} // 此处可根据相应需求作调整
13                 if(Object.keys(getChildren(arr, v[key])).length !== 0){ // 如果存在子节点,此处也可将递归方法抽离出来,以减少代码量和操作
14                     temp[v[key]][children] = getChildren(arr, v[key]) // 此处可根据相应需求作调整
15                 }
16             }
17         })
18         return temp
19     }
20 }

测试数据

 1 let tree = toTree(data)
 2 console.log(JSON.stringify(tree))
 3
 4 // 结果为:
 5 {
 6     "1": {
 7         "children": {
 8             "2": {
 9                 "children": {
10                     "4": {
11                         "children": {
12                             "6": {}
13                         }
14                     }
15                 }
16             },
17             "3": {
18                 "children": {
19                     "5": {}
20                 }
21             }
22         }
23     }
24 }

原文地址:https://www.cnblogs.com/linka/p/9240695.html

时间: 2024-11-03 21:21:30

js将json数组转成tree对象的相关文章

js便利json 数组的方法

js便利json 数组的方法 通过Jason对象获取里面某个键的值方法: 1,对象["键"]. 2,对象.键. 这篇文章主要介绍了JQuery遍历json数组的3种方法,本文分别给出了使用each.for遍历json的方法,其中for又分成两种形式,需要的朋友可以参考下 $(function () { var tbody = ""; //------------遍历对象 .each的使用------------- //对象语法JSON数据格式(当服务器端回调回来的对

JSON字符串转换成Map对象

页面向后台action传递一个json字符串,需要将json字符串转换成Map对象 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import net.sf.json.JSONObject; public Map<String, String> toMap(Object object) { Map<String, String> data = new HashMap<Str

js中json字符串转成js对象

json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 //1. 函数对象构造定义 var obj1 = new Function("return " + str_json)(); console.log(obj1.name); //2. eval函数 var obj2 = eval("(" + str_json + &quo

C# byte数组转成Bitmap对象

方法一: /// <summary> /// 将数组转换成彩色图片 /// </summary> /// <param name="rawValues">图像的byte数组</param> /// <param name="width">图像的宽</param> /// <param name="height">图像的高</param> /// <

json字符串转换成user对象。

原代码如下: 1 DefaultHttpClient httpClient = new DefaultHttpClient(); 2 HttpPost method = new HttpPost("http://localhost:8080/tu-login/tuloginMethod"); 3 4 JSONObject jsonParam = new JSONObject(); 5 jsonParam.put("phone", phone); 6 jsonPara

Gson解析json字符串、json数组转换成对象

实体类: public class Product { private int id; private String name; private String date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name

json数据转化成模型对象

具体思想: 1.将模型对象的属性名和属性类型的创建规则  应与json数据的key-value一一对应. 2.在模型对象初始化之前,给模型对象的每一个属性名赋默认的值.比较 NSString类型默认赋值@"",NSNumber默认赋值 [NSNull null] 3.以json数据的key作为属性名,value作为值给模型数据一一赋值. 有三个重要的方法: // 获取类的所有Property 1. objc_property_t *class_copyPropertyList(Clas

js循环json数组

例如数据库里面的json字符串是这样的 var str = '[{"name":"宗2瓜","num":"1","price":"122"},{"name":"宗呱呱","num":"1","price":"100"}]'; var xqo = eval('(' + s

js 多维数组转成一维数组

1 var arr = [1, 2, [3, 4, [5, 6, 7]]]; 2 var resultArr = []; 3 function forEachArr(arr) { 4 for (var i = 0; i < arr.length; i++) { 5 if (arr[i] instanceof Array) { 6 arguments.callee(arr[i]); 7 // forEachArr(arr[i]); 8 } else { 9 resultArr.push(arr[i