gpt4 book ai didi

javascript - 操作对象数组以获得唯一数据

转载 作者:行者123 更新时间:2023-12-01 02:54:32 27 4
gpt4 key购买 nike

我正在开发一个项目,其中有 2 个对象数组,以下是数据可能存在的各种情况。

// Case 1
var arr1=[{id:1,quantity:10}]
var arr2=[{id:1,quantity:10},{id:2,quantity:20}]

// Case 2
var arr1=[]
var arr2=[{id:1,quantity:10},{id:2,quantity:20}]

// Case 3
var arr1=[{id:1,quantity:12}]
var arr2=[{id:1,quantity:10},{id:2,quantity:20}]

// Case 4
var arr1=[{id:1,quantity:10},{id:1,quantity:20}]
var arr2=[{id:1,quantity:10}]

因此,array1 可能为空,可能包含 array2 中的一个对象,或者 array2 中的两个对象具有不同的数量值。

我想根据arr2更新主数组或arr1,但不想用arr1 = arr2这种解决方案完全刷arr1和arr2。 arr1 应根据 arr2 更新数量,并根据相同的内容添加或删除。

最佳答案

如果 arr1 = arr2 是一个解决方案,只不过您想要变异 arr1 而不是替换然后考虑使用splice:

var arr1=[{id:0,quantity:1},{id:2,quantity:12},{id:3,quantity:9}],
arr2=[{id:1,quantity:10},{id:2,quantity:20}];

arr1.splice(0, arr1.length, ...arr2);

console.log(arr1);

如果您担心 arr1 中的对象在 id 存在于 arr2 中时不应替换 ,但是要变异(保留他们的引用),那么我建议:

var arr1=[{id:0,quantity:1},{id:2,quantity:12},{id:3,quantity:9}],
arr2=[{id:1,quantity:10},{id:2,quantity:20}];
// key both arrays by id in Maps
var mp1 = new Map(arr1.map(obj => [obj.id, obj])),
mp2 = new Map(arr2.map(obj => [obj.id, obj]));
// traverse arr1 from right to left so deletions will not affect the loop
arr1.reduceRight( (_, obj, i) => {
if (mp2.has(obj.id)) {
Object.assign(obj, mp2.get(obj.id)); // update
} else {
arr1.splice(i, 1); // delete
}
}, null);
arr2.forEach( (obj) => {
if (!mp1.has(obj.id)) {
arr1.push(obj); // insert
// If you need the inserted object to be a copy, then do:
// arr1.push(Object.assign({}, obj));
}
});

// If you need the result to be sorted by `id`, then do this also:
arr1.sort( (a,b) => a.id - b.id );

console.log(arr1);

关于javascript - 操作对象数组以获得唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com