Javascript的.includes函数无法正确使用对象数组

Har*_*wis 3 javascript node.js

我有一个使用该.includes()函数的对象数组。我正在用数组中的对象搜索该数组(对象是相同的)。但是似乎没有匹配项。我已经在这个小提琴中重复了这个问题。代码也在下面。那么检查数组是否包含对象的正确方法是什么?

let list1 = [{
    name: "object1"
  },
  {
    name: "object2"
  },
  {
    name: "object3"
  },
  {
    name: "object4"
  }
]


if (list1.includes({
    name: "object1"
  })) {
  document.write('contains')
} else {
  document.write('doesnt')
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*wal 5

您可以尝试以下

let list1 = [{name:"object1"},{name:"object2"},{name:"object3"},{name:"object4"}]


if (list1.some(({name}) => name === "object1")) {
  document.write('contains')
} else {
  document.write('doesnt')
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想使用 `.includes` 以外的东西,`Array.some` 更合适 (3认同)

Ren*_*lla 5

您不能直接比较对象,但是使用此方法,可以将它们与JSON.stringify比较。

let list1 = [{
    name: "object1"
  },
  {
    name: "object2"
  },
  {
    name: "object3"
  },
  {
    name: "object4"
  }
]

var contains = list1.some(elem =>{
  return JSON.stringify({name: "object1"}) === JSON.stringify(elem);
});
if (contains) {
  document.write('contains')
} else {
  document.write('doesnt')
}
Run Code Online (Sandbox Code Playgroud)