首页 > 解决方案 > array.include 是否适用于嵌套对象

问题描述

    {
    "identityA": {
      "_id": "5e98baf27457da339b219eb8",
      "altitude": 0,
      "startTime": "2020-04-16T20:07:00.000Z",
      "endTime": "2020-04-16T20:07:00.000Z",
      "lat": 30.66702,
      "lng": 73.12998,
      "personId": "5e95dfc46cbdd81757e47da2"
    },
    "identityB": {
      "_id": "5e98baf47457da339b219eba",
      "altitude": 0,
      "startTime": "2020-04-16T20:07:00.000Z",
      "endTime": "2020-04-16T20:07:00.000Z",
      "lat": 30.66869,
      "lng": 73.13591,
      "personId": "5e97682d517976252cdab2d1"
    },
    "dist": 0.3709439708757079,
    "id": "5e98bbb77457da339b219ed6",
    "createdAt": "2020-04-16T20:10:31.314Z",
    "updatedAt": "2020-04-16T20:10:31.314Z"
  }

这是我的数组的一个示例对象,我能否使用 array.includes 检测我是否已经在数组中有这个对象。这是我的检查。我的目标是不推送重复的元素

if (!finalInteractions.includes(element1)) {
   finalInteractions.push(element1);
                                           }

标签: javascriptarraysnode.jsnested-object

解决方案


Array.prototype.includes本质上===比较运算符的方式相同。所以对于对象,它通过引用而不是值进行比较。

这就是为什么includes使用引用调用将起作用,而includes使用具有相同属性值但不是引用的对象调用将不起作用:

const arr = [
  {
    name: 'object1'
  },
  {
    name: 'object2'
  }
];

console.log(arr.includes(arr[0])); // --> true
console.log(arr.includes({name: 'object1'})); // --> false


推荐阅读