【问题标题】:How to get the element second index in an array in javascript?如何在javascript中获取数组中的元素第二个索引?
【发布时间】:2013-05-21 12:44:03
【问题描述】:

我有一个数组如下:

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

在这我已经12 三次。我想在 JavaScript 中找到12 的第二个索引。我尝试使用lastIndexOf(),但对我没有帮助。有没有办法找到这个?

【问题讨论】:

    标签: javascript arrays indexof


    【解决方案1】:

    array.indexOf(searchElement[, fromIndex])

    arr.indexOf(12, arr.indexOf(12) + 1);
    

    https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

    【讨论】:

    • 找到第二个索引的好方法:)
    • 请注意,数组indexOf方法在旧浏览器中可能无法使用,需要使用shim。
    • 悲伤但真实。此代码在 IE 中不起作用kangax.github.io/es5-compat-table/#Array.prototype.indexOf
    • 对不起@VisioN 答案在所有浏览器中都有效。所以我接受他的回答
    【解决方案2】:

    另一种可能的解决方案:

    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 我认为这是最干净的。我唯一要添加的是对if(i in this) 测试,以便它更像规范,尽管它很少会有所作为。
    • ...哦等等,你在否定n ...为什么?也许你的意思是!!? ...哦,我明白了。我的想法是for 而不是if。没关系。
    • @squint 不是否定,是--n === 0。我使用n 作为一种计数器。
    • 是的,我看错了。需要否定来防止打破循环。我以某种方式看到了相反的结果。
    • @squint 是的。顺便说一句,我同意i in this。现在它至少应该看起来更好:)
    【解决方案3】:

    我会使用 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? oO 有人试过吗? i 未初始化,index 已全局定义...哇...
    • @PSR 你能找出来吗?
    猜你喜欢
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多