猿问

一个数据转换的问题

最近遇到一个数据转换的问题,如下:

比如元数据是这样的:


[

  { "name": "a" },

  { "name": "a.b" },

  { "name": "a.b.c" },

  { "name": "a.b.d" },

  { "name": "f" },

  { "name": "f.g" },

  { "name": "f.g.h" },

  { "name": "f.g.i" }

]

其中 . 是层级关系,a的子元素是b,转换后要是这种格式:


[{

  name: 'a',

  children: [{

    name: 'b',

    children: [{

      name: 'c'

    },{

      name: 'd',

    }]

  }]

}, {

  name: 'f',

  children: [{

    name: 'g',

    children: [{

      name: 'h'

    },{

      name: 'i',

    }]

  }]

}]

层级不定,知道用递归,但是要塞在一个对象里面,好绕,已经想傻了,大家有什么思路吗


HUX布斯
浏览 345回答 1
1回答

慕标琳琳

var v = [  { "name": "a" },  { "name": "a.b" },  { "name": "a.b.c" },  { "name": "a.b.d" },  { "name": "f" },  { "name": "f.g" },  { "name": "f.g.h" },  { "name": "f.g.i" }]; //v 好序,不好序先排序m = {};v.forEach(o=>{    l = o["name"].split('.');    t = m;    l.forEach(obj=>{        if(t[obj] === undefined)t[obj] = {};        t = t[obj];    });})//递归function f(m){    var res = [];    var k = [];    for(var key in m){        k.push(key);    }    for(var i in k){        var obj = {"name": k[i]};        if(Object.keys(m[k[i]]).length !== 0)obj.children = f(m[k[i]]);        res.push(obj);    }    return res;}r = f(m);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答