2012-09-05 35 views
2

我有一个2维数组。例如inArray,indexOf在二维数组中

var bruecken = [[1,2],[3,4]]; 

现在我想测试一下,如果一个子数组存在:

console.log(jQuery.inArray([1,2], bruecken)); 

console.log(bruecken.indexOf([1,2])); 

,但两种方式返回-1。我究竟做错了什么?

+0

[Search multi-dimensional array JavaScript]可能的重复(http://stackoverflow.com/questions/8809425/search-multi-dimensional-array-javascript) – DrColossos

+0

你知道,你可以upvote你认为有帮助的答案。 .. ;-) – codebox

回答

2

被盗的最快方法是使用一个for循环并进行比较,然后返回,如果发现。这里是你可以用,我用JSON的比较工作,但你可以使用任何比较你找到最好的(有很多):

function arrayInArray(needle, haystack) { 
    var i=0, len=haystack.length, target=JSON.stringify(needle); 
    for(; i<len; i++) { 
     if (JSON.stringify(haystack[i]) == target) { 
      return i; 
     } 
    } 
    return -1; 
} 

arrayInArray([0,1], [ [1,2], [0,1] ]); // 1 

如果你想布尔值,只返回true而不是ifalse而不是-1

0

我不认为inArray会工作,因为使用==比较两个相同的数组将返回false。你可以尝试使用grep代替:

function subArrayInArray(subArray, array){ 
    var matches = $.grep(array, function(a){ 
     // Compare the target array with each of the child arrays 
     return $(subArray).not(a).length == 0 && $(a).not(subArray).length == 0; 
    }); 
    return !!matches.length;  
} 

用于比较两个数组的方法是从this question

+0

谢谢!这就是我需要的。你能否提供一个像'inArray(matches,target)'这样的函数的示例代码来返回布尔值?根据请求, – losh

+0

更改为返回布尔值的函数 – codebox