下午好。我有一个数组,其中包含一些键和值。然后我需要获取数组键而不是其中的数据。我想用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或任何其他更有效的方式获得此功能?
答案 0 :(得分:60)
您可以使用each
功能:
var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
alert(key)
});
它有几个不错的快捷键/技巧:check the gory details here
答案 1 :(得分:50)
使用jQuery,从对象获取密钥数组的最简单方法如下:
$.map(obj, function(element,index) {return index})
在您的情况下,它将返回此数组:["alfa", "beta"]
答案 2 :(得分:28)
console.log( Object.keys( {'a':1,'b':2} ) );
答案 3 :(得分:6)
为此而不是数组对象使用对象(键/值对,最近的JavaScript对关联数组)。除此之外,我认为这是最优雅的方式
var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";
for (var key in foo) {
console.log(key);
}
注意:JavaScript不保证属性的任何特定顺序。所以你不能指望首先定义的属性首先出现,它可能是最后的。
修改强>
在回复您的评论时,我认为本文最好地总结了为什么不应该以这种方式使用JavaScript中的数组的案例 -
答案 4 :(得分:5)
我知道OP专门提到 jQuery 但是我想在这里给出答案,向人们介绍有用的下划线库,如果他们不知道它的话已经。
通过利用Underscore library中的keys
方法,您只需执行以下操作:
_.keys(foo) #=> ["alfa", "beta"]
此外,还有许多值得细读的其他有用功能。
答案 5 :(得分:0)
我使用像我创建的这个函数......
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等的冲突。