Answers:
试试这个:
if(blockedTile.indexOf("118") != -1)
{
// element found
}
if(!!~blockedTile.indexOf('118))该方法,如果结果> -1则始终返回true,如果结果=== -1则始终返回false
indexOf()也可以应用于文字数组,例如if (-1 == [84, 116].indexOf(event.keyCode))。已在Chrome 37.0.2062.122上测试。
indexOf(…) >= 0。没什么区别,我忘了我在哪里养成了习惯
如前所述,如果您的浏览器支持indexOf(),那就太好了!如果不是,则需要对其进行pollyfil或依靠lodash / underscore之类的实用工具。
只是想添加此更新的ES2016添加(以使此问题保持更新):
if (blockedTile.includes("118")) {
// found element
}
它跨浏览器兼容,如果您的数据已排序,则可以执行二进制搜索。
_.indexOf(array,value,[isSorted])返回可以在数组中找到值的索引;如果数组中不存在value,则返回-1。除非缺少它,否则使用本机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');
}
一些浏览器支持Array.indexOf()。
如果没有,您可以Array像这样通过其原型扩展对象。
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0)
{
n = Number(arguments[1]);
if (n !== n) // shortcut for verifying if it's NaN
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n
: Math.max(len - Math.abs(n), 0);
for (; k < len; k++)
{
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
来源。
只需根据您的口味使用:
var blockedTile = [118, 67, 190, 43, 135, 520];
// includes (js)
if ( blockedTile.includes(118) ){
console.log('Found with "includes"');
}
// indexOf (js)
if ( blockedTile.indexOf(67) !== -1 ){
console.log('Found with "indexOf"');
}
// _.indexOf (Underscore library)
if ( _.indexOf(blockedTile, 43, true) ){
console.log('Found with Underscore library "_.indexOf"');
}
// $.inArray (jQuery library)
if ( $.inArray(190, blockedTile) !== -1 ){
console.log('Found with jQuery library "$.inArray"');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
在2019年做到这一点的最佳方法是使用 .includes()
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(1, 2); // false
第一个参数是您要搜索的。第二个参数是此数组中开始搜索的索引位置。
如果您需要在这里浏览一下-有很多传统的答案。
上面已经回答了,但想分享。
虽然不能在IE中使用。感谢您提到它@Mahmoud
var array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
在这里有一些参考。他们也有上面的Polyfill。
Array.includes()是在ES7(ECMAScript 2017)中引入的,不适用于旧的浏览器。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…–
我将使用其他数据结构,因为数组似乎不是最佳解决方案。
代替数组,将对象用作哈希表,如下所示:
(也发布在jsbin中)
var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
map[arr[k]] = true;
}
function is_in_map(key) {
try {
return map[key] === true;
} catch (e) {
return false;
}
}
function print_check(key) {
console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}
print_check("x");
print_check("a");
控制台输出:
x exists? - yes
a exists? - no
这是一个简单的解决方案。如果您更喜欢面向对象的方法,请在Google上搜索“ js hashtable”。
恕我直言与旧版浏览器最兼容
Array.prototype.inArray = function( needle ){
return Array(this).join(",").indexOf(needle) >-1;
}
var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );
通过将Array副本转换为CSV字符串,可以在较旧的浏览器中测试该字符串。
['Lemon Pie'].inArray('Lemon')将返回True。您可以用针缠住,它或使用正则表达式匹配来做同样的事情,但是比起,类似的假阳性原因(|例如),使用模糊的东西来进行连接是更好的选择。这取决于数据集
为什么不使用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
}
在数组示例中,在php中相同(in_array)
var ur_fit = ["slim_fit", "tailored", "comfort"];
var ur_length = ["length_short", "length_regular", "length_high"];
if(ur_fit.indexOf(data_this)!=-1){
alert("Value is avail in ur_fit array");
}
else if(ur_length.indexOf(data_this)!=-1){
alert("value is avail in ur_legth array");
}
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false
includes。与它们相比,该答案如何提供任何其他值?
您可以尝试以下代码。检查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'); }
检查arr.length是否大于0表示存在字符串,否则不存在。
我认为最简单的方法是:
(118 in blockedTile); //is true