私は2次元配列を持っています。例えば
var bruecken = [[1,2],[3,4]];
サブアレイが存在するかどうかをテストしようとしています。
console.log(jQuery.inArray([1,2], bruecken));
また
console.log(bruecken.indexOf([1,2]));
ただし、どちらの場合も-1を返します。私は何が間違っているのですか?
私は2次元配列を持っています。例えば
var bruecken = [[1,2],[3,4]];
サブアレイが存在するかどうかをテストしようとしています。
console.log(jQuery.inArray([1,2], bruecken));
また
console.log(bruecken.indexOf([1,2]));
ただし、どちらの場合も-1を返します。私は何が間違っているのですか?
最も速い方法は、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
代わりに戻ります。i
false
-1
を使用して2つの同一の配列を比較するとfalseが返されるため、inArrayが機能するとは思いません==
。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;
}
この質問から2つのアレイを比較する方法が盗まれました