首页 > 解决方案 > javascript中的多级分组

问题描述

[
    {
        "level1": 1,
        "level2": 1,
        "Id": 1
    },
    {
        "level1": 1,
        "level2": 1,
        "Id": 2
    },
    {
        "level1": 1,
        "level2": 2,
        "Id": 3
    },
    {
        "level1": 1,
        "level2": 2,
        "Id": 4
    },
    {
        "level1": 2,
        "level2": 1,
        "Id": 5
    },
    {
        "level1": 2,
        "level2": 1,
        "Id": 6
    },
    {
        "level1": 2,
        "level2": 2,
        "Id": 7
    },
    {
        "level1": 2,
        "level2": 2,
        "Id": 8
    }
]

输出:-

[
    {
        "level1": 1,
        "level1List": [
            {
                "level2": 1,
                "level2List": [
                    {
                        "Id": 1
                    },
                    {
                        "Id": 2
                    }
                ]
            },
            {
                "level2": 2,
                "level2List": [
                    {
                        "Id": 3
                    },
                    {
                        "Id": 4
                    }
                ]
            }
        ]
    },
    {
        "level1": 2,
        "level1List": [
            {
                "level2": 1,
                "level2List": [
                    {
                        "Id": 5
                    },
                    {
                        "Id": 6
                    }
                ]
            },
            {
                "level2": 2,
                "level2List": [
                    {
                        "Id": 7
                    },
                    {
                        "Id": 8
                    }
                ]
            }
        ]
    }
]  

如何通过es6orloadesh或其他方式获得以上输出?

标签: javascriptecmascript-6

解决方案


您可以通过将对象用作包含该级别的所有项目的哈希表来采用嵌套方法,由该级别的_属性表示。

var data = [{ level1: 1, level2: 1, Id: 1 }, { level1: 1, level2: 1, Id: 2 }, { level1: 1, level2: 2, Id: 3 }, { level1: 1, level2: 2, Id: 4 }, { level1: 2, level2: 1, Id: 5 }, { level1: 2, level2: 1, Id: 6 }, { level1: 2, level2: 2, Id: 7 }, { level1: 2, level2: 2, Id: 8 }],
    keys = ['level1', 'level2'],
    result = [],
    temp = { _: result };

data.forEach(function (a) {
    keys.reduce(function (r, k) {
        if (!r[a[k]]) {
            r[a[k]] = { _: [] };
            r._.push({ [k]: a[k], [k + 'list']: r[a[k]]._ });
        }
        return r[a[k]];
    }, temp)._.push({ Id: a.Id });
});
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读