如何在 JavaScript 中检查数组是否包含某个值

摘要:在本教程中,您将学习如何在 JavaScript 中检查数组是否包含某个值。

JavaScript 中的值可以是原始值,例如 数字字符串。它也可以是 对象

本教程将向您展示如何检查数组是否包含某个值,无论是原始值还是对象。

1) 检查数组是否包含字符串

要检查数组是否包含原始值,您可以使用数组方法,例如 array.includes()

以下示例使用 array.includes() 方法来检查 colors 数组是否包含 'red'

const colors = ['red', 'green', 'blue'];
const result = colors.includes('red');

console.log(result); // trueCode language: JavaScript (javascript)

如果您想在检查时忽略字母大小写,您可以

  • 首先,使用 map()toLocaleLowerCase() 方法返回一个包含所有元素的小写的新数组。
  • 然后,使用 includes() 方法进行检查。

以下示例说明了这些步骤

const colors = ['Red', 'GREEN', 'Blue'];
const result = colors.map(e => e.toLocaleLowerCase())
                     .includes('green');                          

console.log(result); // trueCode 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); // falseCode 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); // trueCode 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); // falseCode 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)

如果 firstsecond 对象具有相同数量的属性且属性值相同,则 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); // trueCode 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); // trueCode language: JavaScript (javascript)

摘要

  • 对于原始值,请使用 array.includes() 方法检查数组是否包含某个值。
  • 对于对象,请使用 isEqual() 辅助函数来比较对象,并使用 array.some() 方法来检查数组是否包含该对象。
本教程是否有帮助?