2013-01-23 37 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

对不起,你是对的 –

相关问题