摘要:在本教程中,您将学习如何在 JavaScript 中检查数组是否包含某个值。
JavaScript 中的值可以是原始值,例如 数字 或 字符串。它也可以是 对象。
本教程将向您展示如何检查数组是否包含某个值,无论是原始值还是对象。
1) 检查数组是否包含字符串
要检查数组是否包含原始值,您可以使用数组方法,例如 array.includes()
以下示例使用 array.includes()
方法来检查 colors
数组是否包含 'red'
const colors = ['red', 'green', 'blue'];
const result = colors.includes('red');
console.log(result); // true
Code language: JavaScript (javascript)
如果您想在检查时忽略字母大小写,您可以
- 首先,使用
map()
和toLocaleLowerCase()
方法返回一个包含所有元素的小写的新数组。 - 然后,使用
includes()
方法进行检查。
以下示例说明了这些步骤
const colors = ['Red', 'GREEN', 'Blue'];
const result = colors.map(e => e.toLocaleLowerCase())
.includes('green');
console.log(result); // true
Code language: JavaScript (javascript)
在本例中,colors
数组不包含 'green'
,但包含 'GREEN'
。
首先,map()
方法将 colors
数组中的每个元素都改为小写,并返回一个新数组。然后,includes()
方法返回 true
,因为结果数组包含元素 'green'
。
2) 检查数组是否包含数字
以下示例展示了如何使用 includes()
方法检查数组是否包含数字
const ratings = [1,2,3,4,5];
let result = ratings.includes(4);
console.log(result); // true
result = ratings.includes(6);
console.log(result); // false
Code language: JavaScript (javascript)
3) 检查数组是否包含对象
以下示例使用 includes()
方法检查数组是否包含对象
const john = {
'name': 'John Doe',
'email': '[email protected]'
};
const jane = {
'name': 'Jane Doe',
'email': '[email protected]'
};
const list = [john, jane];
let result = list.includes(john);
console.log(result); // true
Code language: JavaScript (javascript)
在本例中,list.includes(john)
返回 true
,因为 list
数组包含 john
对象引用。
实际上,您通常不会搜索引用,而是根据对象的属性值搜索对象。以下示例将不起作用
const list = [{
'name': 'John Doe',
'email': '[email protected]'
}, {
'name': 'Jane Doe',
'email': '[email protected]'
}];
let result = list.includes({
'name': 'John Doe',
'email': '[email protected]'
});
console.log(result); // false
Code language: JavaScript (javascript)
在本例中,以下对象
{
'name': 'John Doe',
'email': '[email protected]'
}
Code language: JavaScript (javascript)
…看起来像 list
数组中的第一个元素。但是,includes()
方法返回 false
,因为 list
不包含对所搜索对象的引用。
要检查数组是否包含对象,请执行以下步骤
- 首先,创建一个辅助函数,该函数通过其属性比较两个对象。
- 其次,使用
array.some()
方法根据属性值查找所搜索的对象。
要根据属性值比较对象,请使用以下辅助函数
const isEqual = (first, second) => {
return JSON.stringify(first) === JSON.stringify(second);
}
Code language: JavaScript (javascript)
如果 first
和 second
对象具有相同数量的属性且属性值相同,则 isEqual()
函数返回 true
。
isEqual()
函数的局限性在于,比较对象的属性顺序必须相同。
请注意,某些库提供了允许您根据属性值比较两个对象的函数。
例如,Lodash 具有一个 _.isEqual() 方法,允许您比较对象,如果它们相等,则与使用 JSON.stringify()
相比,其性能更高。
以下示例使用 array.some()
方法将数组的每个元素与所搜索的对象进行匹配
const result = list.some(e => isEqual(e, {
'name': 'John Doe',
'email': '[email protected]'
}));
console.log(result); // true
Code language: JavaScript (javascript)
将所有内容整合在一起
const list = [{
'name': 'John Doe',
'email': '[email protected]'
}, {
'name': 'Jane Doe',
'email': '[email protected]'
}];
const isEqual = (first, second) => {
return JSON.stringify(first) === JSON.stringify(second);
}
const result = list.some(e => isEqual(e, {
'name': 'John Doe',
'email': '[email protected]'
}));
console.log(result); // true
Code language: JavaScript (javascript)
摘要
- 对于原始值,请使用
array.includes()
方法检查数组是否包含某个值。 - 对于对象,请使用
isEqual()
辅助函数来比较对象,并使用array.some()
方法来检查数组是否包含该对象。