如何在JavaScript中获取数组中第二个索引的元素?

4

我有一个数组如下:

var arr = [10, 12, 34, 23, 12, 89, 34, 12];

我在这个序列中出现了三次数字12,我想在JavaScript中找到第二个12的索引。我尝试使用lastIndexOf()方法,但没有得到想要的结果。有没有其他方法可以找到它呢?

3个回答

15

找到第二个索引的好方法 :) - Mehmet Ince
2
请注意,在旧版浏览器中,数组的 indexOf 方法可能无法正常工作,您需要使用一个 shim。 - VisioN
可悲但却是事实。这段代码在IE<9中无法运行 http://kangax.github.io/es5-compat-table/#Array.prototype.indexOf - Yury Tarabanko
抱歉,@VisioN的答案在所有浏览器中都有效。因此我接受了他的答案。 - PSR

4

还有一种可能的解决方案:

Array.prototype.nthIndexOf = function(e, n) {
    var index = -1;
    for (var i = 0, len = this.length; i < len; i++) {
        if (i in this && e === this[i] && !--n) {
            index = i;
            break;
        }
    }
    return index;
};

[10, 12, 34, 23, 12, 89, 34, 12].nthIndexOf(12, 2);
// >> 4

1
+1 我认为这是最干净的。唯一需要添加的是在 if 中加入 (i in this) 的测试,以使其更符合规范,尽管这很少会有影响。 - user1106925
...哦,等等,你是否否定了 n ...为什么?也许你想用 !! 吗?...哦,我明白了。我的思维还停留在 for 而不是 if 上。没关系。 - user1106925
@squint,这不是否定,而是 --n === 0。我使用 n 作为一种计数器。 - VisioN
是的,我看错了。否定是必要的,以防止循环中断。不知怎么的,我把它看反了。 - user1106925
1
@squint 是的。顺便说一下,我同意 i in this 的观点。现在它至少看起来更好了 :) - VisioN

1
我只需要使用for循环遍历数组。
var first = false;
var index = 0;
for(var i = 0; i<arr.length;i++)
{
    if(arr[i] == 12)
    {
         if(first==true)
         {
             index = i;
         }
    first = true;

   }

}

2
+2?oO 有人试过吗?i没有初始化,index在全局范围内定义...哇... - VisioN
1
@PSR 你能帮我找出问题吗? - VisioN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接