2017-01-09 13 views
0

配列が2次元配列の内部にあるかどうかを知りたい。配列が2次元配列にあるかどうかを調べる

これは私が試したものです:

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

いくつかのすべての良い使用法は、かなりの間にそれらの2つを見ていない:) – 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

関連する問題