如何使用 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中使用变量作为数组键[重复]