分组并修改对象数组上的记录

问题描述

    const data = [
        {
        master_id: 1234,serial: 123455768769
    },{
        master_id: 1236,serial: 123455768799
    },{
        master_id: 1234,serial: 123455768779
    },{
        master_id: 1235,serial: 123455768789
    }
];
const serialNos = [123455768769,123455768779,123455768789];

const expected = [{1234: [123455768769,123455768779]},{1235: [123455768789]}];

const result =  _.groupBy(data.filter(eachData => serialNos.includes(eachData.serial)),'master_id');



console.log(result);

写了那么多书后,我陷入了困境,不确定如何进一步实现预期的输出结果。

逻辑: 根据{{​​1}}过滤data,然后使用master_id对它们进行分组,并像预期的输出一样对其进行修改。我被卡在那修改的第三部分。

我在项目中使用Typescript和下划线js。

解决方法

您可以链接序列并首先获取一个子集,然后在对map进行分组后将其设为所需属性。

const
    data = [{ master_id: 1234,serial: 123455768769 },{ master_id: 1236,serial: 123455768799 },{ master_id: 1234,serial: 123455768779 },{ master_id: 1235,serial: 123455768789 }]
    serialNos = [123455768769,123455768779,123455768789],result = _
        .chain(data)
        .filter(eachData => serialNos.includes(eachData.serial))
        .groupBy('master_id')
        .map((array,key) => ({ [key]: _.map(array,_.property('serial')) }))
        .value();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>