假设我有这个:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
还有更多的数组元素,但出于可读性考虑,这些元素很少。无论如何,我可以做一个“for”循环,但每次你点击地图时,它会做500个循环……有没有其他方法来查看某个字符串是否在数组中?
假设我有这个:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
还有更多的数组元素,但出于可读性考虑,这些元素很少。无论如何,我可以做一个“for”循环,但每次你点击地图时,它会做500个循环……有没有其他方法来查看某个字符串是否在数组中?
当前回答
使用Underscore.js
它跨浏览器兼容,并可以执行二进制搜索,如果您的数据已排序。
_ indexOf。
_。indexOf(array, value, [isSorted])返回可以在数组中找到value的索引,如果value在数组中不存在,则返回-1。 除非缺少indexOf函数,否则使用本机indexOf函数。如果你 处理一个大数组,你知道数组已经 为isSorted传递true以使用更快的二分搜索。
例子
//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
alert('true');
}else{
alert('false');
}
//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
alert('true');
}else{
alert('false');
}
其他回答
if(array.indexOf("67") != -1) // is in array
为什么不用array。filter呢?
var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).
只需将其复制到代码中,就可以了:
Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}
如前所述,如果您的浏览器支持indexOf(),那就太好了! 如果不是的话,你需要对它进行polyfil,或者依赖于像lodash/underscore这样的多功能带。
只是想添加这个更新的ES2016新增内容(以保持这个问题的更新):
Array.prototype.includes ()
if (blockedTile.includes("118")) {
// found element
}
根据可用的JavaScript版本,你可以使用indexOf:
返回数组中给定元素所在的第一个索引,如果不存在则返回-1。
或者一些:
测试数组中的某些元素是否通过了所提供函数实现的测试。
但是,如果你做了这种存在性检查,你会更好地使用一个对象来存储你的字符串(或者一个对象以及数组,这取决于你对你的数据做什么)。
您可以尝试下面的代码。检查http://api.jquery.com/jquery.grep/
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }
检查加勒比海盗。长度大于0表示字符串存在,否则不存在。