5

JavaScript の 2D 配列について、次のような質問をしたいと思います。

var array = [[2,45],[3,56],[5,67],[8,98],[6,89],[9,89],[5,67]]

つまり、すべてのインデックスに配列もあります。

2 番目のインデックスに のような値があり56、対応する 1 番目のインデックス (上記の例では 3) が必要だとします。

ループを使用して実行できますが (他にオプションがない場合)、他に良い方法はありますか?

また、JavaScript のメソッドは知っindexOfていますが、次のように呼び出してもインデックスが返されません。

array.indexOf(56);

どんな洞察も役に立ちます。

4

4 に答える 4

11

イテレータ関数を使用します。

filterを使用すると、配列を反復処理して、関数が を返したときに値のみを返すことができますtrue

最新のブラウザーの方法:

var arr = array.filter( function( el ) {
    return !!~el.indexOf( 56 );
} );
console.log( arr ); // [3, 56]
console.log( arr[ 0 ] ); // "3"

jQueryを使用したレガシーブラウザの方法:

var arr = $.filter( array, function() {
    return !!~$.inArray( 56, $( this ) );
} );
console.log( arr ); // [3, 56]
console.log( arr[ 0 ] ); // "3"
于 2012-06-18T10:24:53.997 に答える
6

あなたはこのようにすることができます:

var ret;
var index = array.map(function(el){return el[1];}).indexOf(56);
if (index !== -1) {
  ret = array[index][0];
}
于 2012-06-18T10:14:50.630 に答える
1

array.indexOf( x )配列内の位置を返すxか、見つからない場合は -1 を返します。56 は配列に含まれていないため、2D 配列ではこれは役に立ちません。に含まれる配列にありarrayます。

最初の配列をループしてから、indexOf各サブ配列をチェックするために使用する必要があります。

于 2012-06-18T10:15:00.083 に答える
1

少なくとも IE6 では (最近のバージョンについてはわかりません)、組み込みの Array 型には indexOf メソッドがありませんでした。IE でテストしている場合、おそらくそれが原因で開始できませんでした。すべてのコードに含めるために、この小さな追加を書きました。

if(!Array.prototype.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]===obj){
                return i;
            }
        }
     return -1;
   };
}

私は本当にこれを信用することはできません。これはおそらく、どこかのチュートリアルか Doug Crockford の記事の 1 つで見つけたかなり一般的なコードです。誰かがそれを書くためのより良い方法に沿って来ると確信しています。

Firebug コンソールをインストールすると、どこで問題が発生しているかをよりよく把握できるため、Firefox での作業を開始するのがよいと思います。これでクロスブラウザーの問題が解決するわけではないことは認めますが、少なくともプロジェクトを開始することはできます。

この小さなコードにより、indexOf メソッドを使用して、特定の値が 1 次元配列のどこにあるかを確認できます。2 次元配列では、外側の配列の各要素は単一の値ではなく配列です。他の誰かがより良い答えを出さない限り、それがどのように機能するかを正確に確認するために少しテストを行い、あなたに返信します.

これで少なくとも開始できることを願っています。

更新 Array.indexOf を実装するブラウザーを使用していると仮定して、配列要素の 1 つを外側の配列に渡す方法をすべて試しました。

alert(array.indexOf([3,56]))
alert(array.indexOf("3,56"))

-1 を返すだけです。

奇妙なことに、

alert(array.indexOf(array[1]))

正しく 1 を返します。ただし、インデックスを取得するには、内部配列のインデックスを知る必要があります。indexOf メソッドに配列を渡す方法がわかりません。

于 2012-06-18T10:21:15.820 に答える