如何判断某个成员是否在数组内呢?
目前搜集了两种方法
自制的check方法,部署在
Array.prototype
对象上
Array.prototype.check = function(ele){
var i, l = this.length, res = false;
for(i = 0; i < l; i++){
ele === this[i]?res = true:void 0;
}
return res;
}
聪明一些的方法(别人想出来的),将数组转换为string再用indexOf判断
arr.toString().indexOf(num)===-1?console.log('not in'):console.log('in');
有没有更好一点的方法呢?
据我所知,主要有以下这些方法。indexOf
lastIndexOf
includes
find
findIndex
甚至可以通过filter
,判断过滤后的数组长度实现更复杂的查找
楼上说得都很对,但是数组indexOf的兼容性并不好,其实这个问题可以归结为典型的数组去重。
`//类似hash表的方法
var mArr = new Array();
var hash = new Object();
for(var i=0;i<mArr.length;i++)
{
hash[mArr] = 1;
}
function check(a){
if(hash[a]==1){
return true;
}else{
return false;
}
}
`
Ps: 手机敲代码好难受。。。
数组本身就有indexOf()
方法(ES5)和includes()
方法(ES7)。
另外,你说的那个聪明的方法是有问题的。比如有个数组:
var arr = [12, 345, 67, 890];
你用那个聪明的方法测一下数字45
和8
在不在数组中试试。
es5 就有了 数组的 indexOf 方法。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
你好像没考虑nan
jq有一个inArray方法,你可以看一下,其他人的答案也可以的inArray