在数组中搜索数组

时间:2011-07-12 10:33:51

标签: javascript

我需要在数组中搜索数组的存在。它类似于jQuery.inArray函数。

对于

var a = [ [1,2], [1,3] ];
console.log(  jQuery.inArray([1,3],a  ) )

我得到-1作为ans。这该怎么做?

谢谢

3 个答案:

答案 0 :(得分:2)

在V8(即Chrome)中,有一个很好的诀窍:虽然==不适用于数组,但<= && >=却有效。

如果每个项目显而易见,您可以迭代并检查它们:

for(var i = 0; i < a.length; i++) {
    if(a[i] >= [1, 3] && a[i] <= [1, 3]) alert(i);
}

对于其他浏览器,您需要一个检查数组相等性的函数:

http://www.svendtofte.com/code/usefull_prototypes/prototypes.js

Array.prototype.compareArrays = function(arr) {
    if (this.length != arr.length) return false;
    for (var i = 0; i < arr.length; i++) {
        if (this[i].compareArrays) { //likely nested array
            if (!this[i].compareArrays(arr[i])) return false;
            else continue;
        }
        if (this[i] != arr[i]) return false;
    }
    return true;
}

然后:

for(var i = 0; i < a.length; i++) {
    if(a[i].compareArrays([1, 3])) alert(i);
}

答案 1 :(得分:1)

function inArray (needle, haystack) {
   for (var idx in haystack) { 
        if (haystack[idx].join(',') == needle.join(',')) 
          return idx; 
    }
    return -1;
}

答案 2 :(得分:0)

试试这个

function look4arr(arr, v) {
    for (var i = 0, l = arr.length; i < l; i += 1) {
        if (arr[i].toString() === v.toString()) { //or use +''
            return true;
        }
    }
    return false;
}
var a = [[1,2], 2],
    ok = [1,2],
    ko = [2,3]
look4arr(a, ok); // true
look4arr(a, ko); // false
// as far as the array you are looking at contains primitives seem to work fine

如果你需要搜索“更多”的东西...我的意思是对象文字,正则表达式,函数 您可以使用类似于以下功能的功能

function look4x(arr, v) {
    for (var i = 0, isObjOrArray = false, l = arr.length; i < l; i += 1) {
        isObjOrArray = {}.toString.call(arr[i]).match(/\[object\s(Array|Object)\]/);
        if (
            (isObjOrArray && JSON.stringify(arr[i])+'' == JSON.stringify(v)+'' )
            ||
            (!isObjOrArray && arr[i].toString() === v.toString())
        ) {
            return true;//or i if a jQuery.inArray output is needed 
        }
    }
    return false; // or -1 ... if ... jQuery.inArray
}
var a = [
        [1,[1,[1,[1,2]]]],
        2,
        true,
        'hei',
        Infinity,
        {"o" : "s", 'd':[1,2,3]},
        new RegExp(/\s/),
        function(){alert('hei');}
    ],
    ok = [1,[1,[1,[1,2]]]];

alert(
    look4x(a, [1,[1,[1,[1,2]]]])
    &&
    look4x(a, true)
    &&
    look4x(a, 'hei')
    &&
    look4x(a, Infinity)
    &&
    look4x(a, {"o" : "s", 'd':[1,2,3]})
    &&
    look4x(a, new RegExp(/\s/))
    &&
    look4x(a, function(){alert('hei');})
); // true, in this case

请注意,我还没有通过完整测试对其进行测试;我会尽快发布测试

如果我似乎迟到了,希望它可以帮助别人。

再见