当前位置: 首页 > 知识库问答 >
问题:

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

白宏大
2023-03-14

假设我有这个数组:

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

我想得到第二个< code>99的位置,类似于:

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

然而,indexOf中的第二个参数只是告诉从哪里开始搜索。有没有任何内置函数来实现这一点?如果没有,你会怎么做?

谢谢

共有2个答案

隆芷阳
2023-03-14

没有内置函数,但您可以通过迭代应用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);

但是马特的解决方案可能更有用。

慕金林
2023-03-14

只有索引和最后索引。你可以循环它:

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然后将搜索限制在它之后的元素。

 类似资料:
  • 问题内容: 我想用这样的东西来获取发生的开始位置: 你会怎么做? 问题答案:

  • 我想用这样的东西来获得出现的起始位置: 你会怎么做?

  • 这是我的RecyclerView适配器代码 } 问题是我想当按下按钮时,产品的数量会增加。。。为此,我需要每个项目的位置,但需要我的产品的第一个型号(override fun getItemCount():Int=product)。尺寸)已获得新型号所需的位置(val newitem:List)。 我尝试了这个代码val productpos=newitem.position,给我的错误,大小是1

  • 我创建了一个repo,在里面创建了一个文件,在文件中放入一些内容,并提交了文件。现在,我希望看到该提交的差异,理想情况下,它应该显示添加的文件和添加到其中的行。 但是,返回

  • 问题内容: 我有这张桌子: 如何为每个名称获得年份第二高的行,如下所示: 我尝试了以下查询,但没有成功: 上一个查询给了我这个错误:“ SQL错误(1235):此版本的MySQL尚不支持’LIMIT&IN / ALL / ANY / SOME子查询’” 而且我现在无法更改MySQL版本(5.6.25),因为该解决方案已经投入生产。 有什么帮助吗? 问题答案: 在MySQL中,每个组求解n的一种方法

  • 它返回的第一个日期,我是一个菜鸟在正则表达式,所以请帮助我,谢谢