我正在使用lodash比较具有differentWith(isEqual)函数的objets的两个数组。
这是我的两个数组:
array1
[
{
"id":"28884",
"designation":"French fries",
"description":"French fries",
"prices":[
{
"price":0,
"vat":2821
}
]
},
{
"id":"28885",
"designation":"Potatoes",
"description":"Potatoes",
"prices":[
{
"price":0,
"vat":2821
}
]
}
]
array2
[
{
"id":"28884",
"designation":"French fries",
"description":"French fries",
"prices":[
{
"price":0,
"vat":2821
}
]
},
{
"id":"28885",
"designation":"Potatoes",
"description":"Potatoes",
"prices":[
{
"price":0,
"vat":2821
}
]
},
{
"id":"30157",
"designation":"new item",
"description":null,
"prices":[
{
"price":500,
"vat":2821
}
]
}
]
这是我所做的,但是不起作用:
const toAdd = _.differenceWith(array1, array2, _.isEqual);
const toRemove = _.differenceWith(array2, array1, _.isEqual);
如何获取已删除的元素?此外,如何使用lodash获取新元素,删除元素?谢谢!
答案 0 :(得分:1)
问题是代码_.isEqual
中的比较器无法比较数组中的两个objects
。您可以编写一个自定义比较器。
更简单的香草js选项可能是
removedObjectsArray = array2.filter(item => !array1.map(obj => obj.id).includes(item.id));
此处过滤较大的数组以查找ID不在较小数组中的项目。
答案 1 :(得分:0)
您可以使用_.differenceBy。 _.intersection,用于在对象阵列的情况下与键进行比较。
let toRemove = _.differenceBy(array2, array1, 'id');
let toAdd = _.intersectionBy(array1, array2, 'id');