include 是否适用于对象数组?

Ale*_*x K 1 javascript arrays object

我正在尝试使用包含来查看对象是否在数组内,如下所示:

arr=[{name:'Dan',id:2}]
Run Code Online (Sandbox Code Playgroud)

我想像这样检查:

arr.includes({name:'Dan',id:2})
Run Code Online (Sandbox Code Playgroud)

这返回false,有没有办法做到这一点?

T.J*_*der 5

include 是否适用于对象数组?

是的 - 如果您使用数组中的参数相同的对象includes

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
Run Code Online (Sandbox Code Playgroud)

includes使用===检查,并且o1 === o2仅当o1o2引用同一个对象时才为真。在您的示例中,您使用了两个不同但等效的对象。

对于您的用例,您可能需要some,它允许您执行回调以确定数组中的条目是否与条件匹配:

if (arr.some(e => e.id === 2)) {
Run Code Online (Sandbox Code Playgroud)

例子:

if (arr.some(e => e.id === 2)) {
Run Code Online (Sandbox Code Playgroud)

有多种方法可以旋转它,具体取决于您希望检查的内容(在此问题的答案中详细讨论),但这仅意味着调整您传递的函数的内容some

  • @PraveenKumarPurushothaman - `includes` 中的检查是 `===`(我应该在上面说过,并且会 :-))。`o1 === o2` 只有在 `o1` 和 `o2` 都包含对同一个对象的引用时才为真。(变量保存对象引用,它们是值。虽然还有其他解释......) (2认同)