使用数组.includes进行宽松相等比较

10

Array.includes 对数组元素进行严格比较。

var array1 = [1, 2, 3];

console.log(array1.includes(2)); // return true

console.log(array1.includes("2")); // return false

但我希望第二种情况也返回true。我的主要目标是知道一个数组是否包含一个元素。请建议如何实现。


2
为什么不直接比较元素的整数值?array1.includes(+"2") - Zenoo
你可以使用自定义的 'array.filter' 函数,并返回值是否为2或“2”。 - Luke Stoward
@LukeStoward:没有必要构建一个新的数组(即使已经找到,也要继续搜索到最后)来检查数组是否包含一个值。 :-) - T.J. Crowder
@Zenoo你提出的方法有没有任何限制? - Jagrati
如果您提供的字符串不是数字的表示形式,使用 + 获取其整数值将返回 NaN。除此之外,我没有看到任何缺点。 - Zenoo
2个回答

19

由于includes总是使用严格相等性,因此无法使用它; 您可以改用some

console.log(array1.some(e => e == "2"));

some 是一个方法,对于数组中的每个元素,它调用您提供的回调函数,直到您的回调函数返回一个真值为止。在这种情况下,some 停止循环并返回 true。如果您的回调从未返回真值(包括因为从未调用,因为数组为空),some 返回 false

some 在 ES5(2009 年)中添加。

Live example:

const array1 = [1, 2, 3];
console.log(array1.some(e => e == "2"));


3

如果数组总是由数字组成并且您确定要传递一个字符串进行检查,则也可以使用 parseInt()

console.log(array1.includes(parseInt("2")));

请注意,如果将一个整数传递给parseInt,它也会起作用,但这是不正确的,因为parseInt期望参数是一个字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接