2017-01-09 64 views
0

我想知道數組是否在二維數組內。查找數組是否在二維數組中

這是我的嘗試:

var x=[1,2]; 
var y=[[1,1],[1,2],[2,2],[3,3]]; 

y.includes(x); //should return true 
+0

即使2個陣列看起來是一樣的......他們是不一樣的數組引用。 '[1,2]!== [1,2]'如果你想使用庫,你不能直接將它們作爲對象 – charlietfl

+0

進行比較,underscoreJs有'_.findIndex(y,x)',它會返回在'y'內部的位置http://underscorejs.org/#findIndex,或者你可以用'_.findIndex(y,x)> == 0'來進行真相測試。 – haxxxton

回答

4

你可以用鏈式陣列的方法做到這一點!

var ar = [ 
    [1,1],[1,2],[2,2],[3,3] 
]; 

hasDuplicates(ar, [1,"1"]); //false 
hasDuplicates(ar, [1,1]); //true 

//Use some to determine at least 1 inner array matches 
function hasDuplicates(array, valueToCheck) { 
    return array.some(function(a, i) { 
     //Check each inner arrays index, and verify that it equals on the same index of the array we want to check 
     return a.every(function(ax, ix) { 
      return valueToCheck[ix] === ax; //triple equals for equality! 
     }) 
    }); 
} 

演示:https://jsfiddle.net/a3rq70hL/1/

+0

不錯的用法,有一段時間沒有見過這兩個:) – fubbe

5

你可以創建一個哈希:

var ar = [ 
 
    [1,1],[1,2],[2,2],[3,3] 
 
]; 
 

 
var hash = {}; 
 
for(var i = 0 ; i < ar.length; i += 1) { 
 
    hash[ar[i]] = i; 
 
} 
 

 
var val = [1,2]; 
 

 
if(hash.hasOwnProperty(val)) { 
 
    document.write(hash[val]); 
 
}

+3

不會區分'[「1」 ,「2」]和'[1,2]' - 不確定這個案件是否重要。 +1方式。 – tymeJV

+0

是的,如果我們假設內部數組中的所有值都是整數而不是字符串,那麼這是一個很好的解決方案! – hackerrdave