在没有任何父信息的情况下将Flatten数组转换为父子数组

时间:2019-05-18 18:44:18

标签: javascript arrays object tree flatten

我将平面数组转换为树节点/父子格式的数组时遇到问题,我曾想过使用递归解决方案,但我仍然不知道如何实现。最好的做法是将列表分组,使其仅处理对象项中的字符串代码。像01.05 || 01.05.011 || 01.05.011.0001|| 01.05.011.0002|| 01.05.011.0003一样,我的目标只是想将那些代码转换成这样:

{
  code: 01,
  child: [
     code : 05,
       child: [{
          code: 011,
          child: [
             {
               code: 0001,
               child:[]
             },
             {
               code: 0002,
               child:[]
             },
              {
               code: 0003,
               child:[]
             }
           ]
       }]
  ]
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以用点将字符串分开,并将每个部分作为嵌套结构的新层次。

var array = ['01.05', '01.05.011', '01.05.011.0001', '01.05.011.0002', '01.05.011.0003'],
    result = array.reduce((r, s) => {
        s
            .split('.')
            .reduce((children, code) => {
                var temp = children.find(o => o.code === code);
                if (!temp) children.push(temp = { code, children: [] });
                return temp.children;
            }, r);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }