2

私は配列を持っています

array = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];

そして、サブ配列のインデックスを見つけたい

[1, 2, 3, 4]

したがって、値0を返す必要があります
が、これを実行しようとするたびに-1が返されます

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

array.indexOf(1, 2, 3, 4);

これは、検索している部分配列にコンマが含まれているためです。
どうすればこれを修正できますか

4

3 に答える 3

2

これは、配列を文字列として比較する簡単で汚れたソリューションです。

var array = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];

var target = [9, 10, 11, 12].toString();
for(var i=0; i<array.length; i++) {
   if(target === array[i].toString()) break;
}

if(i >= array.length) {
    console.log("not found");
} else {
    console.log("found at index " + i);
}

http://jsfiddle.net/jMfwQ/

于 2013-07-29T01:30:35.797 に答える
0

問題は、javascript を使用==して配列を比較すると、期待どおりに機能しないことです。独自の配列等価チェッカーを作成する必要があります ( 2 つの配列が JavaScript で等しいかどうかを確認する方法を参照してください)。次に、配列をループし、サブ要素ごとに、検索しようとしている要素と等しいかどうかを確認します

function arraysEqual(a, b) {
    if (a === b) return true;
    if (a == null || b == null) return false;
    if (a.length != b.length) return false;

    // If you don't care about the order of the elements inside
    // the array, you should sort both arrays here.

    for (var i = 0; i < a.length; ++i) {
        if (a[i] !== b[i]) return false;
    }
    return true;
}

var haystack = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];
var needle = [1, 2, 3, 4];
var i = 0;

for(var sub in haystack) {
    if(array_equal(sub, needle)) { // found it
        return i;
    }
    i++;
}

if(i >= haystack.size) //didn't find it
    i = -1;

return i; //return the index of the found needle-array
于 2013-07-29T01:23:28.067 に答える
0

ネイティブメソッドのみを使用し、変数を使用しない非常に単純な文字列マッチングの実装:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
 .map( /./.test, RegExp( "^"+ [9, 10, 11, 12]+"$"  )).indexOf(true); // === 2
于 2013-07-29T01:54:42.767 に答える