gpt4 book ai didi

javascript - 如何获取两个数组之间的差异但保留重复对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:09 25 4
gpt4 key购买 nike

假设您有两个包含对象的数组:数组 1数组 2。我遇到的问题是找到两个数组之间的精确差异,其中可能包括看似彼此相等的元素。在此示例中,我注释了每个数组中的特定对象。

可以将其想象为有一个包含重复商品的购物车,但您只能兑换一件商品。因此 //number 4 是重复项之一,但您在 Array 3

中仍然需要它<小时/>

数组 1

[
{ // number 1
item_id: 4,
total_price: 2.71
},
{ // number 2
item_id: 2,
total_price: 3.71
},
{ // number 3
item_id: 4,
total_price: 1.71
},
{ // number 4
item_id: 4,
total_price: 2.71
}
]
<小时/>

数组 2

[
{ // number 1
item_id: 4,
total_price: 2.71
}
]

如何找到这两个数组(数组 3)之间的差异?每个对象是否最好有一个唯一的键以便更容易比较?在 javascript/node 中执行此操作,主要使用 lodash。

数组 3

[
{ // number 2
item_id: 2,
total_price: 3.71
},
{ // number 3
item_id: 4,
total_price: 1.71
},
{ // number 4
item_id: 4,
total_price: 2.71
}
]

最佳答案

这是使用 lodash#differenceWith 的解决方案.

function difference(arr1, arr2) {
var found = {};
return _.differenceWith(arr1, arr2, function(x, y) {
var isDiff = _.isEqual(x, y) && !found[x.id];
found[x.id] = true;
return isDiff;
});
}

var array1 = [
{ // number 1
item_id: 4,
total_price: 2.71
},
{ // number 2
item_id: 2,
total_price: 3.71
},
{ // number 3
item_id: 4,
total_price: 1.71
},
{ // number 4
item_id: 4,
total_price: 2.71
}
];

var array2 = [
{ // number 1
item_id: 4,
total_price: 2.71
}
];

function difference(arr1, arr2) {
var found = {};
return _.differenceWith(arr1, arr2, function(x, y) {
var isDiff = _.isEqual(x, y) && !found[x.id];
found[x.id] = true;
return isDiff;
});
}

console.log(difference(array1, array2));
body > div { min-height: 100%; top: 0 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

关于javascript - 如何获取两个数组之间的差异但保留重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43213367/

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