【问题标题】:Lodash compare array of objets different lengthLodash比较不同长度的对象数组
【发布时间】:2019-10-10 15:39:47
【问题描述】:

我正在使用 lodash 来比较两个具有 differentWith (isEqual) 函数的对象数组。

这是我的两个数组:

数组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 获取新元素和删除元素?谢谢!

【问题讨论】:

    标签: javascript arrays lodash


    【解决方案1】:

    问题是代码_.isEqual 中的比较器无法比较数组中的两个objects。您可以编写一个自定义比较器。

    一个更简单的 vanilla js 选项可能是

    removedObjectsArray = array2.filter(item => !array1.map(obj => obj.id).includes(item.id));
    

    在这里过滤较大的数组以查找具有不在较小数组中的 id 的项目。

    【讨论】:

      【解决方案2】:

      您可以使用 _.differenceBy 。 _.intersectionBy 用于在对象数组的情况下与键进行比较。

      .differenceBy .intersectionBy

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

      【讨论】:

      • 显然,他们有 _.property iteratee 函数的简写
      • 是的,文档至少可以说令人困惑!
      • @DhananjaiPai 是的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多