1

私はウェブサイトを見回してきましたが、配列内の値のインデックスを見つけることに関する質問しか見つかりませんでしたが、その値は配列内のその値の唯一の出現です. 繰り返される値が発生するたびにそのインデックスを見つける方法があるのだろうかと思っていました。

次のような配列があるとします。

var arr = [45,56,76,4,53,43,6,273,884,69,47,58,225,222,23,13,89,900,7,66,78,74,69];

これをループして、値 69 のインデックスを見つけることは可能ですか?

4

6 に答える 6

3

最新のブラウザでそれを行う方法は次のとおりです。

function findIndexes(arr, val){
  return arr.map(function(v,i){ return v==val && i }).filter(Number);
}

console.log(findIndexes(arr, 69)); //=> [9,22]
于 2013-07-25T01:47:27.260 に答える
2

もちろん可能です。コンピューターはすごいです。

var positions = [];
for (var i = 0; i < arr.length; ++i)
  if (arr[i] === 69)
    positions.push(i);

そのループの終わりに、配列「positions」には、69 が見つかった配列のすべてのインデックスが含まれます。

これを一般化できます:

function indexes(arr, value) {
  var rv = [];
  for (var i = 0; i < arr.length; ++i)
    if (arr[i] === value)
      rv.push(i);
  return rv;
}

その後:

var i69 = indexes(arr, 69);
于 2013-07-25T01:42:47.910 に答える
1

while次のループindexOfはありません-1..

function allIndicesOf(arr, val) {
    var found = [], i = -1;
    while (-1 !== (i = arr.indexOf(val, i + 1))) found.push(i);
    return found;
}

var arr = [0, 1, 2, 3, 2, 1, 8, 5, 2, 0, 4, 3, 3, 1];

allIndicesOf(arr, 3); // [3, 11, 12]
于 2013-07-25T01:57:24.440 に答える
0

私の考え

function indexs(arr,val){
    var start = arr.indexOf(val),result = [];
    while(start >= 0){
        result.push(start);
        start = arr.indexOf(val,start+1);
    }
    return result;
}

楽しむ :)

于 2013-07-25T02:23:42.263 に答える
0

var arr = [45,56,76,4,53,43,6,273,884,69,47,58,225,222,23,13,89,900,7,66,78,74,69],
    i = arr.length,
    o = {};

while( i-- ) {
    if( !o[ arr[i] ] ) {  
        `o[ arr[i] ] = [];`
    }
    o[ arr[i] ].push( i );
}

alert( o[69] );
于 2013-07-25T02:31:31.657 に答える