【问题标题】:How to get the position of the second occurrence?如何获得第二次出现的位置?
【发布时间】:2013-01-23 12:21:35
【问题描述】:

假设我有这个数组:

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

我想得到第二个99的位置,比如:

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

但是indexOf 中的第二个参数只是告诉从哪里开始搜索。是否有任何内置函数可以做到这一点?如果没有,你会怎么做?

谢谢!

【问题讨论】:

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

标签: javascript arrays position indexof


【解决方案1】:

只有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 然后将搜索限制在其后面的元素。

【讨论】:

  • 其实你的答案是对的,但是我才意识到我正在寻找别的东西stackoverflow.com/questions/14480345/…
  • @Adam:您可以将我的答案与strpos insead of indexOf 一起使用:php.net/manual/en/function.strpos.php
  • @Adam: 哎呀...然后继续使用indexOf ;) 抱歉,一时糊涂了。我的解决方案也适用于字符串(只要您不想考虑单词边界)。只是说':)
【解决方案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 可能更有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多