获取对象的键的数组
我想要一个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);