JavaScript中,判断一个特定值是否在数组中的最快方法是什么?

10

4
在 JavaScript 中,如果想要判断一个数组中是否包含某个特定的对象,可以使用 Array.prototype.includes() 方法。如果你需要支持老版本浏览器,也可以使用 Array.prototype.indexOf() 或者遍历整个数组来实现该功能。 - zbrunson
1
http://underscorejs.org/docs/underscore.html#section-21 - asawyer
4个回答

10

使用indexOf()函数检查该值是否存在

array.indexOf(8)

示例代码,

var arr = [0,8,5];
alert(arr.indexOf(8))​; //returns key

更新

针对IE的支持

//IE support
if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(obj, start) {
         for (var i = (start || 0), j = this.length; i < j; i++) {
             if (this[i] === obj) { return i; }
         }
         return -1;
    }
}

var arr = [0,8,5];
alert(arr.indexOf(8))

1
Array.indexOf 在 IE < 9 中不起作用。 - gen_Eric
1
@MuthuKumaran:不可能。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf - naveen
1
@MuthuKumaran:那是因为那个fiddle正在使用MooTools。如果不存在,MooTools会添加Array.prototype.indexOf - gen_Eric
感谢大家指出这个问题。我已经更新了我的回答。 - Muthu Kumaran
1
MDC还建议更详细的实现方式,详情请参见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/IndexOf#Compatibility。 - naveen
显示剩余5条评论

4
你可以使用 indexOf() 函数。
var fruits = ["a1", "a2", "a3", "a4"];
var a = fruits.indexOf("a3");

输出结果为:2。

2
Array.indexOf 在 IE < 9 中不起作用。 - gen_Eric
1
请参考此答案以解决 IE < 9 浏览器的问题: https://dev59.com/MnI-5IYBdhLWcg3wpqMK - Dineshkani

0

你可以使用 indexOf 或者尝试这个方法:

$.inArray(value, array)

-1

phpjs有一个很好的将PHP中in_array函数移植到JavaScript中的端口,您可以使用它

http://phpjs.org/functions/in_array/

看例子:

in_array('van', ['Kevin', 'van', 'Zonneveld']);

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