如何使用 jQuery 获取数组键?

Posted

技术标签:

【中文标题】如何使用 jQuery 获取数组键?【英文标题】:how to fetch array keys with 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 或任何其他更有效的方法?

【问题讨论】:

【参考方案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 ) );

【讨论】:

这仅适用于 javascript 1.8.5+ 浏览器支持请参见此处页面底部的表格:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…【参考方案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 中的数组不应该以这种方式使用的案例 -

"Associative Arrays" considered Harmful

【讨论】:

感谢您的注意,幸运的是,在这种特殊情况下对我来说并不重要。 :) 但是只有一个问题,为什么将它作为一个对象(关联数组)更好?【参考方案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 等冲突。

【讨论】:

即使在这里它也做了类似的事情。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 我认为应该只使用 keys() 但它还没有完全实现,所以我像往常一样推出了自己的。

以上是关于如何使用 jQuery 获取数组键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript或jquery中使用变量作为数组键[重复]

使用jquery检查复选框时如何制作键值对数组?

jQuery:使用预定义的数组键从输入数组中获取值

使用 jQuery 单击时从作为数组的按钮 ID 获取键

如何使用键在php中获取数组的第一个元素以及如何找到数组的第一个键[重复]

如何使用 javascript / jQuery 获取数据 ajax api 数组?