如何在 JavaScript 中检查数组是否包含值?
以下是检查 #JavaScript 数组是否包含值的代码。您可以使用新的数组includes
方法 😋 对于旧版浏览器和 IE,您可以使用indexOf
👍
const array = ['🥗', '🍔', '🍰'];
// Modern Browser
array.includes('🍰'); // true
// Older Browser
array.indexOf('🍰') !== -1; // true
includes
与其他原始类型
除了字符串之外,includes
它还适用于其他原始类型。
const symbol = Symbol('symbol');
const array = [
'string',
200,
0,
undefined,
null,
symbol
];
使用includes
array.includes('string'); // true
array.includes(200); // true
array.includes(0); // true
array.includes(undefined); // true
array.includes(null); // true
array.includes(symbol); // true
使用indexOf
array.indexOf('string') !== -1; // true
array.indexOf(200) !== -1; // true
array.indexOf(0) !== -1; // true
array.indexOf(undefined) !== -1; // true
array.indexOf(null) !== -1; // true
array.indexOf(symbol) !== -1; // true
注意事项indexOf
到目前为止,我已经向你展示了两者可以互换的值includes
。indexOf
然而,有一个值是它们不同的。
const array = [NaN];
// ✅
array.includes(NaN); // true
// 😱
array.indexOf(NaN) !== -1; // false
使用以下方法检查对象数组some()
对于适用于其他数据类型的更通用的解决方案,您可能希望使用some
。
“.some()”:测试数组中是否至少有一个元素通过了所提供函数实现的测试。它返回一个布尔值。
const array = ['🥗', '🍔', '🍰'];
array.some(food => food === '🍰'); // true
此方法非常适合对象阵列。
const array = [{ name: 'js' }, { name: 'css' }];
array.some(code => code.name === 'js'); // true
array.some(code => code.name === '🤖'); // false
在之前的代码说明中,我谈到了一种objects
使用进行检查的快速而又肮脏的方法JSON.stringify()
。
根据这个概念,我们还可以用它来比较数组中的对象元素,如下所示:
const array = [{ name: 'js' }, { name: 'css' }];
array.some(code => JSON.stringify(code) === JSON.stringify({ name: 'css' }));
// true
区分大小写
和 都includes
区分indexOf
大小写:
const array = ['SAMANTHA'];
array.includes('samantha'); // false
array.indexOf('samantha') !== -1; // false
为了使其不区分大小写,您可以考虑像这样更改数组的大小写:
const array = ['SAMANTHA'];
const sameCaseArray = array.map(value => value.toLowerCase());
// ['samantha']
sameCaseArray.includes('samantha'); // true
sameCaseArray.indexOf('samantha') !== -1; // true
但如果您使用some
,您可以在一行中完成:
const array = ['SAMANTHA'];
array.some(value => value.toLowerCase() === 'samantha'); // true
浏览器支持
对所有现代浏览器的支持includes
都非常好。但是,如果您需要 IE 或更老的浏览器,则需要使用indexOf
。
我可以使用吗?Array.prototype.includes
社区意见
-
@lolinoid:
contains
> @prvnbist 这是一种 DOM 节点方法,最常见的例子是获取一个类名列表,该列表将是一个节点列表,然后你可以使用 contain 方法查看它是否包含类名。或者你可以将其转换为数组,然后使用 includes 方法。 -
你可以使用
in
运算符循环遍历对象,检查特定属性键是否存在。(由@fvbix分享的知识)
const object = { kiwi: '🥝', pear: '🍐', cheese: '🧀' },;
'kiwi' in object; // true
// Use it as a conditional
if ('kiwi' in object) {
// do something if property key exists
}
-
[@pixelfixer]( https://twitter.com/pixelfixer /status/1234011311006191617?s=21):_ 如果您希望返回值,可以使用
Array.find()
-
性能测试 >数组 indexOf 与 includes 对比。感谢@equiman:
资源
- MDN Web 文档:包括
- MDN Web 文档:indexOf
- Stack Overflow:如何检查 JavaScript 中的数组是否包含值?
- MDN Web 文档:一些
- w3schools:包含
- MDN Web 文档:in 运算符
- 最初发表于 www.samanthaming.com
感谢阅读❤
打个招呼!Instagram | Twitter |博客| SamanthaMing.com