does include works with array of objects?

点点圈 提交于 2021-02-05 09:28:13

问题


i'm trying to use includes to see if an object is inside the array like so:

arr=[{name:'Dan',id:2}]

and I want to check like so:

arr.includes({name:'Dan',id:2})

and this returns false, is there a way to do that?


回答1:


does include works with array of objects?

Yes — if you use the same object as the argument to includes that's in the array:

const obj = {name: "Dan", id: 2};
const arr = [{name: "T.J.", id: 42}, obj, {name: "Joe", id: 3}];
console.log(arr.includes(obj));                  // true
console.log(arr.includes({name: "Dan", id: 2})); // false

includes uses a === check, and o1 === o2 is only ever true when o1 and o2 refer to the same object. In your example, you're using two different but equivalent objects instead.

For your use case, you probably want some, which lets you execute a callback to determine whether an entry in the array matches a condition:

if (arr.some(e => e.id === 2)) {

Example:

const obj = {name: "Dan", id: 2};
const arr = [{name: "T.J.", id: 42}, obj, {name: "Joe", id: 3}];
console.log(arr.some(obj => obj.id === 2));      // true

There are various ways to spin that, depending on what you want the check to be (which are discussed at length in this question's answers), but that just means adjusting the contents of the function you pass some.




回答2:


Not like that. Use some instead:

arr.some(obj => obj.id === 2)

Which checks if there is an object with id equals to 2.

If you are checking for both id and name then:

arr.some(obj => obj.id === 2 && obj.name === "Dan")



回答3:


Arrays do have includes() function, but for your case, you have to do using some():

arr.some(e => e.id === 2 && e.name === "Dan")
arr.some(e => e.name === "Dan")


来源:https://stackoverflow.com/questions/53748605/does-include-works-with-array-of-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!