从字符串列表到分层对象

时间:2015-11-12 16:45:36

标签: javascript hierarchical-data

我正在寻找一种转换字符串数组的方法,如:

['AABBCC','AABBDD','BBBBTT','BBVVDD']

进入分层json:

{
"code": "AA",
"sub": [
    {
        "code": "BB",
        "sub": [
            {
                "code": "CC"
            },
            {
                "code": "DD"
            }
        ]
    }
]
}

等等BB元素。使用前2个字母为第一组构建,而另外2个为第二组构建。 关于如何解决这个问题的任何想法?

非常感谢

1 个答案:

答案 0 :(得分:0)

此提案针对给定的迭代数组提供了特征  Array.prototype.forEach()

  

forEach()方法每个数组元素执行一次提供的函数。

并分割字符串String.prototype.match()

  

match()方法在将字符串与正则表达式匹配时检索匹配。

以及查找Array.prototype.some()

  

some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。

如果找到code,则sub的引用将用于下一级别。

如果没有,则将新对象推送到实际数组。



var data = ['AABBCC', 'AABBDD', 'BBBBTT', 'BBVVDD'],
    obj = [];

data.forEach(function (a) {
    var o = obj, keys = a.match(/.{1,2}/g);
    keys.forEach(function (k) {
        var oo = { code: k, sub: [] };
        if (!o.some(function (b) {
            if (b.code === k) {
                o = b.sub;
                return true;
            }
        })) {
            o.push(oo);
            o = oo.sub;
        }
    });
});

document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
&#13;
&#13;
&#13;