如何获得第二次出现的位置?

时间:2013-01-23 12:21:36

标签: javascript arrays position indexof

假设我有这个数组:

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

我想获得第二个99的位置,例如:

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

然而,indexOf中的第二个参数只是告诉我从哪里开始搜索。有没有内置的功能来做到这一点?如果不是,你会怎么做?

谢谢!

2 个答案:

答案 0 :(得分: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]

如果你总是希望第二次出现Jan的方法也很好:

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

右边的indexOf调用找到第一个匹配项,+1然后将搜索范围限制为跟随它的元素。

答案 1 :(得分: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可能更有用。