如何检查 JavaScript 数组是否包含特定值?
基本值
你可以使用 Array.prototype.includes()
来检查数组是否包含基本值。当处理字符串、数字、布尔值、符号、null
或 undefined
时,这是最方便的选项。你甚至可以指定一个索引作为第二个参数来开始搜索。
const array = [1, 2, 3, 4, 5];
array.includes(3); // true
array.includes(6); // false
array.includes(3, 3); // false
[!NOTE]
这段代码可以很容易地扩展为检查数组是否包含另一个数组中的任何或所有值。
对象
与基本值不同,你不能使用 Array.prototype.includes()
来检查数组是否包含对象。这是因为 JavaScript 如何比较值以及对象是引用类型的事实。我强烈建议阅读之前关于对象比较的文章,因为我不会在这里详细介绍如何比较对象。
由于基本值和对象之间的差异,你不能使用 Array.prototype.includes()
来检查数组是否包含对象。然而,只要你实现了一个深度相等函数,你就可以使用 Array.prototype.some()
来检查是否有任何对象与另一个对象的形状匹配。
const array = [{ a: 1 }, { a: 2 }, { a: 3 }];
```javascript
const equals = (a, b) => Object.keys(a).every(key => a[key] === b[key]);
array.some(item => equals(item, { a: 2 })); // true
array.some(item => equals(item, { a: 4 })); // false
const equals = (a, b) => Object.keys(a).every(key => a[key] === b[key]);
array.some(item => equals(item, { a: 2 })); // true
array.some(item => equals(item, { a: 4 })); // false