2

この配列があるとしましょう:

var a = [1,2,99,3,4,99,5];

99次のような2 番目の位置を取得したいと思います。

a.indexOf(99, 2) // --> 5

ただし、 の 2 番目の引数はindexOf、検索を開始する場所を示すだけです。これを行うための組み込み関数はありますか?そうでない場合、どのようにしますか?

ありがとう!

4

2 に答える 2

4

としかありませindexOflastIndexOf。あなたはそれをループすることができます:

var a = [1,2,99,3,4,99,5];
var matches = []
for (var i=0; i<a.length; i++){
    if (a[i] == 99) {
        matches.push(i)
    }
}
console.log(matches); // [2, 5]

常に 2 番目のオカレンスが必要な場合は、Jan の方法も適しています。

a.indexOf(99, a.indexOf(99) + 1)

indexOf右側の呼び出しは、最初に見つかったものを見つけて+1から、検索をそれに続く要素に限定します。

于 2013-01-23T12:26:35.477 に答える
2

組み込み関数はありませんが、繰り返し適用することで、独自の関数を簡単に作成できますindexOf

function indexOfOccurrence(haystack, needle, occurrence) {
    var counter = 0;
    var index = -1;
    do {
        index = haystack.indexOf(needle, index + 1);
    }
    while (index !== -1 && (++counter < occurrence));
    return index;
}

// Usage
var index = indexOfOccurrence(a, 99, 2);

しかし、Matt のソリューションの方が便利かもしれません。

于 2013-01-23T12:33:56.537 に答える