在javascript中分组元素

时间:2018-05-10 11:32:27

标签: javascript arrays

我通过将另一个列表中的元素(使用d3.nest)

分组来创建此列表
array = [ {key: "6S", values: [{Id: "1234a", ECTS: 3},
                               {Id: "1234b", ECTS: 3}]}, 
          {key: "7S", values: [{Id: "1534a", ECTS: 5},
                               {Id: "154b", ECTS: 4},]} ]

从这个列表中我想创建这样的东西:

array = [{key: "6S", values: { 3: [{Id: "1234a"}, {Id: "1234b"}]}},

        {key: "7S", values: { 5: [{Id: "1534a"}], 4: [{Id:"1534a"}]}}]

实际上我想通过ECTS对每个密钥(6S,7S)的数据进行分组。 我试过_.groupBy ....但是没有用。问题是我想要分组的元素是已经分组一次的对象。 关于如何对物品进行分组的任何想法?

1 个答案:

答案 0 :(得分:0)

var array = [{
        key: "6S",
        values: [{
                Id: "1234a",
                ECTS: 3
            },
            {
                Id: "1234b",
                ECTS: 3
            }
        ]
    },

    {
        key: "7S",
        values: [{
                Id: "1534a",
                ECTS: 5
            },
            {
                Id: "154b",
                ECTS: 4
            },
        ]
    }
]

array = array.map(function(v1) {
    var updatedVal = v1.values.reduce(function(obj, v2) {
        obj[v2.ECTS] = obj[v2.ECTS] || [];
        obj[v2.ECTS].push({
            Id: v2.Id
        });
        return obj;
    }, {});
    v1.values = updatedVal;
    return v1;
});

console.log(array);