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

Groupby and modify the records on array of objects

    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);

我写了那么多之后卡住了,不知道如何进一步进行以达到预期的输出。

逻辑: 根据 serialNos 筛选 data,然后使用 master_id 按它们分组,并像预期输出一样修改它们。我卡在了第三个修改部分。

我在我的项目中使用打字稿和下划线 js。

您可以链接序列并首先获得一个子集,然后在对地图进行分组后得到想要的 属性。

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>