一个json 数组转tree

1.递归
一个json 数组
var nodes = [
{"id":2,"title":"第一级1","parentid":0},
{"id":3,"title":"第二级1","parentid":2},
{"id":4,"title":"第二级2","parentid":2},
{"id":5,"title":"第三级1","parentid":4},
{"id":6,"title":"第三级2","parentid":3}
];
如何用递归的方式

转成

var newnode = {
                id:"2",
                title:"第一级1",
               children:[
                           {
                             id:"3",
                             title:"第二级1",
                             children:[
                                        {
                                            id:"6",
                                            title:"第三级2",
                                            children:[]
                                        }
                                        ]
                            },
                           {
                             id:"4",
                             title:"第二级2",
                             children:[
                                         {
                                            id:"5",
                                            title:"第三级1",
                                            children:[]
                                         }
                                        ]
                            }
                         ]
              }



递归算法


 function fn(data, parentid) {
    var result = [], temp;
    for (var i = 0; i < data.length; i++) {
        if (data[i].parentid== parentid) {
            var obj = {"text": data[i].name,"id": data[i].id};
            temp = fn(data, data[i].id);
            if (temp.length > 0) {
                obj.children = temp;
            }
            result.push(obj);
        }
    }
    return result;

}


2.for循环

[
 {"id":1,"parendId":0,"name":"系统管理","url":"chart/list1.html"},
 {"id":2,"parentId":1,"name":"Fruits","url":"chart/list1.html"},
 {"id":3,"parentId":1,"name":"Vegetables"},
 {"id":4,"parentId":2,"name":"apple"},
 {"id":5,"parentId":2,"name":"orange","url":"chart/list1.html"},
 {"id":6,"parentId":3,"name":"tomato"},
 {"id":7,"parentId":3,"name":"carrot"},
 {"id":8,"parentId":3,"name":"cabbage"},
 {"id":9,"parentId":3,"name":"potato"},
 {"id":10,"parentId":3,"name":"lettuce"}
 ]

那么如何将url添加到tree中呢?

  function convert(rows){
          function exists(rows, parentId){
              for(var i=0; i<rows.length; i++){
                  if (rows[i].id == parentId) return true;
              }
              return false;
          }
          
          var nodes = [];
         // 获取顶级的node
         for(var i=0; i<rows.length; i++){
            var row = rows[i];
             if (!exists(rows, row.parentId)){
                /**
                 gys    给顶层添加链接
                 **/
                 var topNode={id:row.id,text:row.name,url:row.url};                
                 nodes.push(topNode);
                 
                 /* nodes.push({
                     id:row.id,
                     text:row.name
                 }); */
             }
         }
         
         var toDo = [];
         for(var i=0; i<nodes.length; i++){
             toDo.push(nodes[i]);
         }
         while(toDo.length){//循环toDo当toDo长度为零时停止
             var node = toDo.shift();//删除第一个元素,然后返回第一个元素,改变数组长度    
            // 获取子节点
             for(var i=0; i<rows.length; i++){
                 var row = rows[i];
                 if (row.parentId == node.id){
                    var child = {id:row.id,text:row.name};
                     /**
                     gys 添加链接
                     **/
                     if(row.url){
                         child.url=row.url;
                     }
                    if (node.children){
                       node.children.push(child);
                     } else {
                         node.children = [child];
                     }
                     toDo.push(child);
                 }
             }
         }
         return nodes;
     }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将一个 JSON 数组转换为树形结构,可以使用递归的方法来构建树。以下是一个示例的 JavaScript 实现: ```javascript function buildTree(jsonArray) { const map = {}; const roots = []; // 构建节点映射表 for (const item of jsonArray) { const id = item.id; const parentId = item.parentId; map[id] = { ...item, children: [] }; if (!parentId) { roots.push(map[id]); // 根节点 } else { if (!map[parentId]) { map[parentId] = { children: [] }; } map[parentId].children.push(map[id]); } } return roots; } // 示例用法: const jsonArray = [ { id: 1, name: 'Node 1', parentId: null }, { id: 2, name: 'Node 2', parentId: 1 }, { id: 3, name: 'Node 3', parentId: 1 }, { id: 4, name: 'Node 4', parentId: 2 }, { id: 5, name: 'Node 5', parentId: null }, ]; const tree = buildTree(jsonArray); console.log(tree); // 输出换后的树形结构 ``` 在这段代码中,我们定义了一个 `buildTree` 函数,它接受一个 JSON 数组作为输入,并返回换后的树形结构。 首先,我们创建一个空对象 `map` 来存储节点的映射关系,以及一个空数组 `roots` 来存储根节点。 然后,我们遍历 JSON 数组,对于每个节点,我们将其 id 作为键,将该节点的副本(包括其它属性和一个空数组 children)作为值存储在 `map` 中。 如果节点的 `parentId` 为 null,则将该节点添加到 `roots` 数组中,表示它是根节点。 如果节点的 `parentId` 不为 null,则将该节点添加到对应父节点的 `children` 数组中。 最后,我们返回 `roots` 数组,即换后的树形结构。 通过创建示例的 JSON 数组,并调用 `buildTree` 函数,我们可以将其换为树形结构并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值