我想获得一个JavaScript对象的键作为一个数组,无论是在jQuery或纯JavaScript。

还有比这更简洁的方法吗?

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

当前回答

如果你决定使用Underscore.js,你最好这样做

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);

其他回答

如果你决定使用Underscore.js,你最好这样做

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);

2022年,JavaScript还没有一个合理的方法来处理哈希?

这将发出警告,但有效:

Object.prototype.keys = function() { return Object.keys(this) }
console.log("Keys of an object: ", { a:1, b:2 }.keys() )

// Keys of an object:  Array [ "a", "b" ]
// WARN: Line 8:1:  Object prototype is read only, properties should not be added  no-extend-native

也就是说,扩展内置对象是有争议的。

你可以使用jQuery的$.map。

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

用种:

Var foo = { “α”:“雀”, “β”:“小猎犬” }; var keys = Object.keys(foo); Console.log (keys) // ['alpha', 'beta'] //(或者其他顺序,键是无序的)。

这是ES5的一个特性。这意味着它可以在所有现代浏览器中工作,但不能在传统浏览器中工作。

ES5-shim有一个Object的实现。可以偷的钥匙

我不知道是否更啰嗦,但我受到了一行请求的启发,将以下内容强制到一行中,尽管不知道它有多Pythonic;)

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