5

特定の値が繰り返される配列で一連の数値を使用しています。繰り返される値のすべての出現のインデックスを見つけたいです。

たとえば、次のコードを使用していますindexOf()

var dataset = [2,2,4,2,6,4,7,8];
return dataset.indexOf(2);

しかし、これは の最初の出現のインデックスを与えるだけです2。(つまり、値を返します0。)

ただし、すべての出現のインデックス2が返されるようにします(つまり、0,1,3)。これどうやってするの?(forループを使用できることはわかっていますが、配列全体を反復処理せずにこれを行うためのより良い方法があるかどうか疑問に思っています。基本的に、配列全体を明示的に反復処理するオーバーヘッドを節約しようとしています。)

4

4 に答える 4

3

@Bagavatu: for ループが必要ない場合は、このフィドルを試すことができます-

var dataset = [2,2,4,2,6,4,7,8];
var results = [];

var ind

// the while loop stops when there are no more found
while( ( ind = dataset.indexOf( 2 ) ) != -1 ){
    results.push( ind + results.length )
    dataset.splice( ind, 1 )
}

return results;

注: for ループを使用すると、はるかに高速になります。コメントを参照してください。

var dataset = [2,2,4,2,6,4,7,8];
var results = [];
for ( i=0; i < dataset.length; i++ ){
    if ( dataset[i] == 2 ){
        results.push( i );
    }
}

return results;
于 2013-06-26T05:50:28.127 に答える
2

オブジェクトのfilter()メソッドを使用して適切に処理できます。Array

var dataset = [2, 2, 4, 2, 6, 4, 7, 8];
var indexs = [];
dataset.filter(function(elem, index, array){
    if(elem == 2) {
        indexs.push(index);
    }
});
alert(indexs);

また、こちらは filter() メソッドに関するその他のドキュメントと、古いブラウザのフォールバックです。

于 2013-06-26T05:52:56.570 に答える
1

この機能はそのままでは使用できないようですが、関数を作成することで「プラグイン」を利用できますArray.prototype.allIndexOf

リスト全体を繰り返し処理しますが (これは必須です)、ロジックを少し抽象化します。

于 2013-06-26T05:53:58.757 に答える
1

ここに例があります:

var dataset = [2,2,4,2,6,4,7,8];

// We get the first indexOf number 2
var prev = dataset.indexOf(2);

// While we find indexes we keep searching
while (prev != -1) { 
    alert(prev);
    // we get the indexOf number 2 starting in the previous position + 1
    prev = dataset.indexOf(2, prev + 1);
}
于 2013-06-26T05:48:10.007 に答える