如何检测对象数组是否包含特定对象?

时间:2018-05-21 17:16:13

标签: javascript arrays json object

说我有一个对象数组arr = []。 在arr内,有许多对象,都是相同的格式,比如说。

arr = [
  {
    "a": "asdf",
    "b": {
      "a": 2,
      "b": 1,
      "c": 4
    },
    "c": {
      "a": 0,
      "b": 1
    }
  },
  {
    "a": "xswh",
    "b": {
      "a": 4,
      "b": null,
      "c": 8
    },
    "c": {
      "a": 6,
      "b": 5
    }
  }
]

如果我的变量是相同形状的对象:

obj1 = {
    "a": "asdf",
    "b": {
      "a": 2,
      "b": 1,
      "c": 4
    },
    "c": {
      "a": 0,
      "b": 1
    }
  }

如何快速检查此对象obj1是否在数组中? (意思是,如果在数组中有一个具有完全相同的参数和值的对象。

我试过arr.includes(obj1),但似乎没有用。

2 个答案:

答案 0 :(得分:0)

您可以使用findIndex功能并执行以下操作:

arr.findIndex(item => JSON.stringify(item) === JSON.stringify(obj1));

答案 1 :(得分:0)

使用 - Lodash

的解决方案

你可以在集合(数组)上使用find来查找特定对象值的匹配,使用isEqual来对你进行深度比较(在这种情况下是对象的属性)。

_.find(arr, (v) => { 
   return _.isEqual(v, obj1);
});

find - 'Find' documentation
isEqual - 'isEqual' documentation