2013-01-23 35 views
1

比方說,我有這樣的數組:如何獲得第二次出現的位置?

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

我想獲得第二99的位置,這樣的:

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

然而在indexOf第二個參數只是告訴何處開始搜索。有沒有內置的功能來做到這一點?如果不是,你會怎麼做?

謝謝!

+0

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

回答

3

只有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] 

如果你總是希望第二次出現簡的方法也不錯:

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

indexOf調用右邊找到的第一次出現,+1然後將搜索限制在遵循它的元素。

+0

其實你的答案是正確的,但我只是意識到我正在尋找其他東西http://stackoverflow.com/questions/14480345/regex-how-to-get-n-occurrence-in-a-string – Adam

+0

@Adam:你可以使用我的答案'indexOf'的strpos' insead:http://php.net/manual/ en/function.strpos.php –

+0

但這是javascript:D無論如何它已經解決:) – Adam

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's solution可能更爲有用。

+0

對不起,你是對的 –

相關問題