2012-09-05 71 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