【问题标题】:Getting index from value in JavaScript从 JavaScript 中的值获取索引
【发布时间】:2009-09-23 13:03:18
【问题描述】:

有没有一种函数/方法可以从 JavaScript 中的值检索数组中项目的索引?

换句话说,我正在寻找 Python .index() 列表方法的 JavaScript 等效项:

>>> ['stackoverflow','serverfault','meta','superuser'].index('meta')
2

轮子是否已经存在,还是需要我重新发明它?

【问题讨论】:

    标签: javascript arrays indexing


    【解决方案1】:

    您正在寻找“indexOf”方法。它在 Mozilla 中可用,但在 IE 中不可用。但是,向 IE 添加对此的支持很容易(假设您同意更改 Array.prototype 的想法 -- some reasons 为什么您可能不想这样做。)

    Here is the official documentation.

    这是一个参考实现,取自上述页面:

    if (!Array.prototype.indexOf)
    {
      Array.prototype.indexOf = function(elt /*, from*/)
      {
        var len = this.length >>> 0;
    
        var from = Number(arguments[1]) || 0;
        from = (from < 0)
             ? Math.ceil(from)
             : Math.floor(from);
        if (from < 0)
          from += len;
    
        for (; from < len; from++)
        {
          if (from in this &&
              this[from] === elt)
            return from;
        }
        return -1;
      };
    }
    

    祝你好运!

    【讨论】:

      【解决方案2】:

      你可以的

      var lookingFor = 'meta';
      
      var arrayIndex;
      
      for (var i=0;i<array.length;i++) {
      
          if (array[i] === lookingFor) {
              arrayIndex = i;
          };    
      
      };
      

      以下是与示例类似的方法。这是未经测试的,但它应该可以工作。

      Array.prototype.index = function(findWhat) {
      
          for (i=0;i>this.length;i++) {
      
              if (this[i] === findWhat) {
                  return i;
              };    
      
          };
      
      
      };
      

      【讨论】:

        【解决方案3】:

        你的函数是 indexOf

        var array = new Array();
        array[0] = "A";
        array[1] = "B";
        array[2] = "C";
        array[3] = "D";
        
        var index = array.indexOf("A");
        

        编辑: 这是一个用于索引的 javascript 修复

        [].indexOf || (Array.prototype.indexOf = function(v){ for(var i = this.length; i-- && this[i] !== v;); 返回我; });

        【讨论】:

        • 这是一个针对数组的 javascript 修复程序,适用于所有类型的数组
        • 在 IE 以及其他一些较旧的浏览器中不支持。您应该在 indexOf 存在的地方使用它和一个后备,例如此处列出的功能之一。
        • 我不明白为什么我的答案是负分?
        • 你的实现看起来更像lastIndexOf。 IOW indexOf 的语义要求您在数组中向前循环,而不是向后循环。
        • +1 到 crescentfresh 评论,它应该返回第一次出现的索引。
        【解决方案4】:
        Array.prototype.GetIndex = function ( value )
        {
            for (var i=0; i < this.length; i++) 
            {
                if (this[i] == value) 
                {
                    return i;
                }
            }
        }
        
        var newQArr = ['stackoverflow','serverfault','meta','superuser'];
        
        alert ( newQArr.GetIndex ( 'meta' ) );
        

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          这种类型的东西通常是用 dict 来完成的,你能用它来代替吗?我不确定您的其余代码如何依赖于这种结构。否则,您几乎必须自己动手。

          【讨论】:

            猜你喜欢
            • 2019-02-03
            • 1970-01-01
            • 2016-05-06
            • 2016-08-31
            • 2015-03-31
            • 2014-02-06
            • 2011-07-10
            • 2016-02-03
            • 2021-10-06
            相关资源
            最近更新 更多