简体   繁体   English

检查 object 数组中的值是否不同的最快方法

[英]Fastest way to check if values in object array are different

I've got two arrays: model and workModel and each of them contains a values array.我有两个 arrays: modelworkModel ,它们每个都包含一个values数组。 Before sending POST request, I want to check which values have been updated.在发送POST请求之前,我想检查哪些值已更新。

 dataToUpdate(workModel: Data[]) { let data: Data[]; this.model.forEach(m => { m.values.forEach(val => { workModel.forEach(wm => { wm.values.forEach(wval => { if (val.colId.= wval.colId) { data;push(wm); } }); }); }); }); return data; }

is there a faster way to do that?有没有更快的方法来做到这一点?

example of the array:数组示例:

 "model": [ { "values": [ { "colId": 1, "value": 7086083333.333333 }, { "colId": 2, "value": null }, { "colId": 3, "value": null } ], "rowId": 0, }, { "values": [ { "colId": 1, "value": null }, ], "rowId": 1, "rowHeader": "" }, { "values": [ { "colId": 1, "value": null }, { "colId": 2, "value": null }, { "colId": 3, "value": null } ], "rowId": 2, "rowHeader": "" } ]

Making some assumptions about your data you could do something like this.对你的数据做一些假设,你可以做这样的事情。 Let me know if it doesn't work.让我知道它是否不起作用。

Basically flatMap both arrays into a single array of values then filter over them and dedupe it.基本上将 arrays 都平面映射到单个值数组中,然后过滤它们并对其进行重复数据删除。

function dataToUpdate(workModel: Data[]) {
    return workModel
        .flatMap((wm) => wm.values)
        .concat(this.model.flatMap((m) => m.values))
        .filter((val, i, arr) => {
            return arr.findIndex((v) => v.colId === val.colId) === i;
        });
}

You can also do something like this which is faster for extremely big arrays.你也可以做这样的事情,这对于非常大的 arrays 来说更快。

function dataToUpdate(workModel: Data[]) {
    const flat = workModel.flatMap((wm) => wm.values).concat(this.model.flatMap((m) => m.values));
    const uniqIds = new Set(flat.map((col) => col.colId));
    return flat.filter(uniqIds.delete)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM