获取对象的键的数组

我想要一个JavaScript对象的键作为一个数组,在jQuery或纯JavaScript中。

有没有比这更详细的方式?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); } 
 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = Object.keys(foo); // ['alpha', 'beta'] // (or maybe some other order, keys are unordered). 

使用Object.keys

这是一个ES5function。 这意味着它适用于所有现代浏览器,但在传统浏览器中无法使用 。

ES5-shim有一个你可以窃取的Object.keys的实现

你可以使用jQuery的$.map

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }, keys = $.map(foo, function(v, i){ return i; }); 

当然, Object.keys()是获取Object的键的最好方法。 如果在你的环境中不可用,那么可以用你的例子中的代码来微调 (除非你需要考虑你的循环遍历原型链上的所有属性,不像Object.keys()行为)。

不过,您的示例代码…

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); } 

jsFiddle 。

…可以修改。 您可以在可变部分中进行分配。

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = [], i = 0; for (keys[i++] in foo) {} 

jsFiddle 。

当然,这个行为与Object.keys()实际上做的不同( jsFiddle )。 您可以简单地使用MDN文档中的填充 。

我不知道有多less细节,但是我受到启发,以单线的要求强迫下列句子,不知道Pythonic是如何的;)

 var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);