soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
如何检查数组是否在JavaScript中包含值?

找出JavaScript数组是否包含值的最简洁,最有效的方法是什么?

这是我知道的唯一方法:

function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;}

有没有更好,更简洁的方法来实现这一目标?

现代的浏览器Array#includes,这不正是这一点,得到广泛支持的人,除IE:

console.log(['joe', 'jane', 'mary'].includes('jane')); //true

您也可以使用Array#indexOf,它不太直接,但对于过时的浏览器不需要使用polyfill。


许多框架还提供类似的方法:

注意,有些框架将此功能实现为一个函数,而另一些框架则将该函数添加到数组原型中。

从2019年开始更新:这个答案来自2008年(11岁!),与现代JS使用无关。承诺的性能改进基于当时在浏览器中完成的基准测试。它可能与现代JS执行上下文无关。如果您需要简单的解决方案,请寻找其他答案。如果您需要最佳性能,请在相关执行环境中为自己设定基准。

就像其他人所说的那样,遍历数组可能是最好的方法,但是事实证明,递减while循环是JavaScript中最快的迭代方法。因此,您可能希望按如下所示重写代码:

function contains(a, obj) {
var i = a.length;
while (i--) {
 if (a[i] === obj) {
 return true;
 }
}
return false;}

当然,您也可以扩展Array原型:

Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;}

现在,您可以简单地使用以下内容:

alert([1, 2, 3].contains(2)); // => truealert([1, 2, 3].contains('2')); // => false

ECMAScript 7引入了Array.prototype.includes

可以这样使用:

[1, 2, 3].includes(2); // true[1, 2, 3].includes(4); // false

它还接受一个可选的第二个参数fromIndex

[1, 2, 3].includes(3, 3); // false[1, 2, 3].includes(3, -1); // true

不像indexOf,它采用严格相等比较includes比较了使用SameValueZero平等算法。这意味着您可以检测数组是否包含NaN

[1, 2, NaN].includes(NaN); // true

也不同于indexOfincludes不会跳过缺少的索引:

new Array(5).includes(undefined); // true

目前,它仍然是草稿,但可以对其进行多填充以使其在所有浏览器上均可使用。



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示