假设我有这个:

var blockedTile = new Array("118", "67", "190", "43", "135", "520");

还有更多的数组元素,但出于可读性考虑,这些元素很少。无论如何,我可以做一个“for”循环,但每次你点击地图时,它会做500个循环……有没有其他方法来查看某个字符串是否在数组中?


当前回答

根据可用的JavaScript版本,你可以使用indexOf:

返回数组中给定元素所在的第一个索引,如果不存在则返回-1。

或者一些:

测试数组中的某些元素是否通过了所提供函数实现的测试。

但是,如果你做了这种存在性检查,你会更好地使用一个对象来存储你的字符串(或者一个对象以及数组,这取决于你对你的数据做什么)。

其他回答

根据可用的JavaScript版本,你可以使用indexOf:

返回数组中给定元素所在的第一个索引,如果不存在则返回-1。

或者一些:

测试数组中的某些元素是否通过了所提供函数实现的测试。

但是,如果你做了这种存在性检查,你会更好地使用一个对象来存储你的字符串(或者一个对象以及数组,这取决于你对你的数据做什么)。

恕我直言,最兼容旧浏览器

Array.prototype.inArray = function(needle){ 返回Array(this).join(",").indexOf(needle) >-1; } var foods =["奶酪","洋葱","泡菜","火腿"]; test = foods.inArray("Lemon"); console.log(“Lemon is”+ (test ?"": "not ") + "in the list.");

通过将Array副本转换为CSV字符串,您可以在旧浏览器中测试字符串。

if(array.indexOf("67") != -1) // is in array

如前所述,如果您的浏览器支持indexOf(),那就太好了! 如果不是的话,你需要对它进行polyfil,或者依赖于像lodash/underscore这样的多功能带。

只是想添加这个更新的ES2016新增内容(以保持这个问题的更新):

Array.prototype.includes ()

if (blockedTile.includes("118")) {
    // found element
}

试试这个:

if(blockedTile.indexOf("118") != -1)
{  
   // element found
}