假设您有两个带有对象的数组,数组1和Array 2。我遇到的问题是找到两个数组之间的确切的差异,其中可能包括看起来与每个数组相等的元素。在本例中,我注释了每个数组中的特定对象。
从购物车和重复物品的角度来考虑这一点,但是你只能赎回一件物品。因此,//number 4
是重复的项目之一,但是在数组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/节点中完成的,主要是使用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
}
]
发布于 2017-04-05 00:03:45
这里有一个使用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>
发布于 2017-04-04 17:18:53
你可以用这样的方法来做这件事:
array2.forEach(el => {
let index = _.findIndex(array1, e => e.item_id === el.item_id);
if (index >= 0) {
array1.splice(index, 1);
}
});
现在,您的array1
将删除正确的值。如果您想保留原始的array1
,那么先复制它,然后处理该副本:
let array3 = _.clone(array1);
array2.forEach(el => {
let index = _.findIndex(array3, e => e.item_id === el.item_id);
if (index >= 0) {
array3.splice(index, 1);
}
});
现在您已经在array3
中得到了结果。
发布于 2017-04-04 17:29:46
基本上你想从Array2中减去Array1?
有点丑,但效果很好:
for(var i = 0; i < arrayA.length; i++) {
var arrAElement = arrayA[i];
arrayC.push(arrAElement);
for(var j = 0; j < arrayB.length; j++) {
var arrBElement = arrayB[j];
if(arrAElement.item_id == arrBElement.item_id &&
arrAElement.total_price == arrBElement.total_price) {
arrayB.splice(j,1);
arrayC.pop();
break;
}
}
}
https://stackoverflow.com/questions/43213367
复制相似问题