[英]Lodash compare array of objets different length
我正在使用 lodash 比較兩個 arrays 對象與 differentWith (isEqual) function。
這是我的兩個 arrays:
數組1
[
{
"id":"28884",
"designation":"French fries",
"description":"French fries",
"prices":[
{
"price":0,
"vat":2821
}
]
},
{
"id":"28885",
"designation":"Potatoes",
"description":"Potatoes",
"prices":[
{
"price":0,
"vat":2821
}
]
}
]
數組2
[
{
"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 獲取新元素、刪除元素? 謝謝 !
問題是代碼_.isEqual
中的比較器無法比較數組中的兩個objects
。 您可以編寫一個自定義比較器。
一個更簡單的 vanilla js 選項可能是
removedObjectsArray = array2.filter(item => !array1.map(obj => obj.id).includes(item.id));
這里過濾較大的數組以查找具有不在較小數組中的 id 的項目。
您可以使用 _.differenceBy。 _.intersectionBy 用於在對象數組的情況下與鍵進行比較。
let toRemove = _.differenceBy(array2, array1, 'id');
let toAdd = _.intersectionBy(array1, array2, 'id');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.