首页 > 解决方案 > 如何在角度 8 的对象数组中进行分组

问题描述

如何对一组对象进行分组?在以下情况下可以使用reduce吗?

例如:如果同样需要将数据单独附加到一个字段中,我需要对 id 和 name 进行分组。

[{
data: ["Sriram Krishnan", 1440]
id: "CHARSUR"
name: "CHARSUR"
},
{
data: ["shaleesh ", 2955]
id: "Timesheet"
name: "Timesheet"
},
{
data:["Balachander ", 3720]
id: "CHARSUR"
name: "CHARSUR"
},
{
data: ["Sriram Krishnan", 720]
id: "Aroscop"
name: "Aroscop"
},
{
data: ["Karthik ", 540]
id: "Timesheet"
name: "Timesheet"
},
{
data: ["Shaju Murugan", 420]
id: "CHARSUR"
name: "CHARSUR"
}]

预期结果:我需要将分组结果(数据)附加到数组数组中。

[{
data: [["Sriram Krishnan", 1440],["Balachander ", 3720],["Shaju Murugan", 420]]
id: "CHARSUR"
name: "CHARSUR"
},
{
data: [["shaleesh ", 2955],["Karthik  ", 540]]
id: "Timesheet"
name: "Timesheet"
},
{
data: ["Sriram Krishnan", 720]
id: "Aroscop"
name: "Aroscop"
}]

我正在以一种在 highcharts 饼图中使用的方式形成数据。

标签: jqueryjquery-uihighchartshighcharts-ng

解决方案


在您的源数据中,请确保对象字段用逗号分隔:

src = [
    {
        data: ['Sriram Krishnan', 1440],
        id: 'CHARSUR',
        name: 'CHARSUR',
    },
    {
        data: ['shaleesh ', 2955],
        id: 'Timesheet',
        name: 'Timesheet',
    },
    {
        data: ['Balachander ', 3720],
        id: 'CHARSUR',
        name: 'CHARSUR',
    },
    {
        data: ['Sriram Krishnan', 720],
        id: 'Aroscop',
        name: 'Aroscop',
    },
    {
        data: ['Karthik ', 540],
        id: 'Timesheet',
        name: 'Timesheet',
    },
    {
        data: ['Shaju Murugan', 420],
        id: 'CHARSUR',
        name: 'CHARSUR',
    }];

此 JavaScript 代码将产生预期的分组结果:


let dst = [];

function getRecordInDst(srcRecord) {
    for (let dstRecord of dst) {
        if (dstRecord.id === srcRecord.id) return dstRecord;
    }
    let newRecord = {id: srcRecord.id, name: srcRecord.name, data: []};
    dst.push(newRecord);
    return newRecord;
}

for (let record of src) {
    getRecordInDst(record).data.push(record.data);
}

推荐阅读