[英]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: model
和workModel
,它们每个都包含一个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.