.jpg)
找出 JavaScript 数组是否包含值的最简洁有效的方法是什么?
这是我所知道的唯一方法:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
有没有更好、更简洁的方法来实现这一点?
这与 Stack Overflow 问题非常密切相关 在 JavaScript 数组中查找项目的最佳方法?解决了使用 .indexOf

网友回答:
2019 年更新:此答案来自 2008 年(11 岁!),与现代 JS 使用无关。承诺的性能改进是基于当时浏览器中的基准测试。它可能与现代 JS 执行上下文无关。如果您需要一个简单的解决方案,请寻找其他答案。如果您需要最佳性能,请在相关执行环境中为自己进行基准测试。
正如其他人所说,通过数组进行迭代可能是最好的方法,但已经证明递减循环是在 JavaScript 中迭代的最快方法。因此,您可能需要按如下方式重写代码:while
function contains(a, obj) {
var i = a.length;
while (i--) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Of course, you may as well extend Array prototype:
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
And now you can simply use the following:
alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false

网友回答:
现代浏览器有 ,它正是这样做的,并且除了IE之外,每个人都广泛支持:Array#includes
console.log(['joe', 'jane', 'mary'].includes('jane')); //true
您也可以使用 ,它不太直接,但对于过时的浏览器不需要 polyfill。Array#indexOf
console.log(['joe', 'jane', 'mary'].indexOf('jane') >= 0); //true
许多框架也提供类似的方法:
$.inArray(value, array, [fromIndex])_.contains(array, value)_.include_.includes)dojo.indexOf(array, value, [fromIndex, findLast])array.indexOf(value)array.indexOf(value)findValue(array, value)array.indexOf(value)Ext.Array.contains(array, value)_.includes(array, value, [from])_.containsR.includes(value, array)请注意,某些框架将其实现为函数,而其他框架则将函数添加到数组原型中。

网友回答:
indexOf也许吧,但它是“ECMA-262 标准的 JavaScript 扩展;因此,它可能不会出现在该标准的其他实现中。
例:
[1, 2, 3].indexOf(1) => 0
["foo", "bar", "baz"].indexOf("bar") => 1
[1, 2, 3].indexOf(4) => -1
AFAICS Microsoft不提供某种替代方案,但是如果您愿意,您可以为Internet Explorer(以及其他不支持的浏览器)中的数组添加类似的功能,正如快速Google搜索显示的那样(例如,这个)。indexOf
模板简介:该模板名称为【JavaScript 数组中查找项目的最佳方法?使用 .indexOf】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。