js判断是否在数组中

如题所述

js判断某个给定值是否在数组中的方法:

function isInArray(arr, val){
    var i, iLen;
    if(!(arr instanceof Array) || arr.length === 0){
        return false;
    }
    if(typeof Array.prototype.indexOf === 'function'){
        return !!~arr.indexOf(val)
    }
    for(i = 0, iLen = arr.length; i < iLen; i++){
        if(val === arr[i]){
            return true;
        }
    }
    return false;
}
isInArray([1,2,3,4,5],5);//true
isInArray([1,2,3,4,5],6);//false
isInArray([1,2,3,4,5],'5');//false

解释:

arr instanceof Array判断arr变量是否为数组,如果不是,则输入参数有误,返回false

arr.length === 0判断数组长度是否为0,如果是0,则无论给出哪个值,都不在数组中,返回false

typeof Array.prototype.indexOf === 'function'用来判断浏览器是否原生支持数组的indexOf方法,新版的浏览器都支持数组原生的indexOf,该函数用于获取给定值在数组中的位置信息,如果存在返回首次出现的位置下标,不存在返回-1

arr.indexOf(val)使用原生的方法判断val首次在arr中出现的下标,不存在返回-1

~为取反,只有在值为-1的时候,取反结果为0,其他情况都非零。

!!隐式转换,转为bool型,如果是0则转换后为false,否则为true

后面用循环判断数组每一个值与给定值是否完全相等(此处用===表示不仅数值相等,类型也要相等),如果相等返回true,否则循环结束后返回false

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-26
很简单的嘛,判断在数组中的嘛,如果是字符串,数字类型的数组元素,就可以用很普通的方法的啦,Chrome支持indexOf,lastIndexOf啦,其他的浏览器用join,然后indexOf啦,再不然对象,数组元素的话,就比较复杂啦,要判断属性等因素啦

本回答被提问者和网友采纳
第2个回答  2014-01-26
function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}
var str ="1_2";
var obj = [ "1_3","3_1","2_1","3_4","4_2","1_2","0_0" ];
alert( contains(obj, str) )

第3个回答  2014-01-26
var str ="1_2";
var obj = [ "1_3","3_1","2_1","3_4","4_2","1_2","0_0" ];
console.log(obj.indexOf(str)); //5