【问题标题】:how to fetch array keys with jQuery?如何使用 jQuery 获取数组键?
【发布时间】:2010-11-18 06:16:06
【问题描述】:

下午好。我有一个包含一些键和值的数组。然后我需要获取数组键而不是其中的数据。我想用 jQuery 做到这一点。例如,我知道 PHP 有一个名为 array_keys(); 的函数。它将数组作为参数,并为您返回一个数组,其中包含每个索引中的每个键。

这是我想出的,而且有效……唯一的问题是它似乎效率低下;

var foo = [];
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
    console.log(key);
}

这将输出;

alfa
beta

但是是否有任何预定义的函数,如 PHP 或任何其他更有效的方法?

【问题讨论】:

    标签: jquery arrays key


    【解决方案1】:

    你可以使用each函数:

    var a = {};
    a['alfa'] = 0;
    a['beta'] = 1;
    $.each(a, function(key, value) {
          alert(key)
    });
    

    它有几个不错的快捷方式/技巧:check the gory details here

    【讨论】:

    • $.each() 在内部对对象使用什么?!这个方法会比较慢,因为使用回调函数会增加作用域链的长度,因此解析对a的属性的引用需要更长的时间
    • 不要忘记使用弯括号而不是方括号来定义数组!
    • console.log(key) 对于长列表等会更好
    【解决方案2】:

    使用 jQuery,从对象中获取键数组的最简单方法如下:

    $.map(obj, function(element,index) {return index})
    

    在你的情况下,它将返回这个数组:["alfa", "beta"]

    【讨论】:

    • 与 Object.keys 的一个细微差别是 JQuery 版本(使用 JQuery v1.6.2 和 v1.8.2 测试)将数组键(索引)作为整数返回,而不是 Object.keys 作为字符串返回。虽然这在 99.999% 的情况下都不是问题......
    【解决方案3】:
    console.log( Object.keys( {'a':1,'b':2} ) );
    

    【讨论】:

    【解决方案4】:

    不要重新发明轮子,使用Underscore

    我知道 OP 特别提到了 jQuery,但我想在这里给出一个答案,以便向人们介绍有用的 Underscore 库,如果他们不知道的话已经。

    通过利用Underscore library 中的keys 方法,您可以简单地执行以下操作:

    _.keys(foo)  #=> ["alfa", "beta"]
    

    此外,还有许多其他有用的功能值得细读。

    【讨论】:

      【解决方案5】:

      为此使用对象(键/值对,最近的 JavaScript 必须是关联数组)而不是数组对象。除此之外,我认为这是最优雅的方式

      var foo = {};
      foo['alfa'] = "first item";
      foo['beta'] = "second item";
      
      for (var key in foo) {
              console.log(key);
      }
      

      注意:JavaScript 不保证属性的任何特定顺序。所以你不能指望最先定义的属性最先出现,它可能最后出现。

      编辑:

      作为对您的评论的回应,我相信这篇文章最好地总结了为什么 JavaScript 中的数组不应该以这种方式使用的案例 -

      【讨论】:

      • 感谢您的注意,幸运的是,在这种特殊情况下对我来说并不重要。 :) 但是只有一个问题,为什么将它作为一个对象(关联数组)更好?
      【解决方案6】:

      我使用了类似我创建的这个函数...

      Object.getKeys = function(obj, add) {
          if(obj === undefined || obj === null) {
              return undefined;
          }
          var keys = [];
          if(add !== undefined) {
              keys = jQuery.merge(keys, add);
          }
          for(key in obj) {
              if(obj.hasOwnProperty(key)) {
                      keys.push(key);
              }
          }
          return keys;
      };
      

      我认为您可以在第一次测试中将 obj 设置为 self 或更好的值。 有时我似乎也在检查它是否也是空的,所以我就这样做了。 另外我不认为 {} 是 Object.* 或者至少以这种方式在 Object 上找到函数 getKeys 存在问题。 也许你应该把原型放在第一位,但这似乎会导致与 GreenSock 等冲突。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多