Javascript / underscore / lodash:比较对象数组中的对象并删除匹配的对象

时间:2017-05-26 01:01:04

标签: javascript underscore.js lodash

我有一个对象数组,如下所示:

var arrayOfObjects = [
  {
    key_a : "value1",
    key_b : "value2"
  },
  {
    key_c : "value12",
    key_d : "value23"
  }
];

现在,我有另一个对象:

 var objToCompare = {
    key_a : "value1",
    key_b : "value2"
 };

有什么方法可以比较'objToCompare'和'arrayOfObjects'并从'arrayOfObjects'中删除匹配的对象 - 使用javascript或underscore js或lodash?

因此,结果对象的数组看起来像:

var arrayOfObjects = [
  {
    key_c : "value12",
    key_d : "value23"
  }
];

*当匹配所有属性时,只应从对象数组中删除对象。

4 个答案:

答案 0 :(得分:2)

我找到了解决问题的简便方法。将objectToCompare转换为数组并使用_.differenceWith()进行比较。

请检查下面的代码。

    var _ = require('lodash')

    var arrayOfObjects = [
      {
        key_a : "value1",
        key_b : "value2"
      },
      {
        key_c : "value12",
        key_d : "value23"
      }
    ]


    var objToCompare = {
       key_a : "value1",
       key_b : "value2"
    }

    var arrayToCompare = []
    arrayToCompare.push(objToCompare)

    var result = _.differenceWith(arrayOfObjects, arrayToCompare, _.isEqual)

    console.log(result)

答案 1 :(得分:1)

您可以使用_.reject和_.isEqual方法。这几乎与Underscore / Lodash中的_.where方法完全相反。

print queue

答案 2 :(得分:1)

纯javascript版本



desc='test'




答案 3 :(得分:0)

应该如此简单:

arrayOfObjects.filter((item) => !(item.key_a === objToCompare.key_a && item.key_b === objToCompare.key_b))

编辑:FWIW:这是一个纯粹的javascript解决方案,它只执行所需的并且无法有效地重新创建lodash / underscore isEqual < / p>