簡體   English   中英

Lodash比較不同長度的對象數組

[英]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 用於在對象數組的情況下與鍵進行比較。

.differenceBy .intersectionBy

 let toRemove = _.differenceBy(array2, array1, 'id');
 let toAdd = _.intersectionBy(array1, array2, 'id');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM