我想以数组的形式获取 JavaScript 对象的键,无论是在 jQuery 还是纯 JavaScript 中。
还有比这更简洁的方法吗?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
我想以数组的形式获取 JavaScript 对象的键,无论是在 jQuery 还是纯 JavaScript 中。
还有比这更简洁的方法吗?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
使用Object.keys:
var foo = {
  'alpha': 'puffin',
  'beta': 'beagle'
};
var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered).
这是 ES5 的特性。这意味着它适用于所有现代浏览器,但不适用于旧版浏览器。
ES5-shim 有一个你可以窃取的实现Object.keys
您可以使用 jQuery 的$.map.
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});
当然Object.keys()是最好的获得一个对象的关键途径。如果它在您的环境中不可用,则可以使用例如您的示例中的代码对其进行微调(除非您需要考虑到您的循环将遍历原型链上的所有属性,这与Object.keys()的行为不同)。
但是,您的示例代码...
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
……可以修改。您可以直接在变量部分进行赋值。
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
如果您在这里寻找将 n 深度嵌套对象的键列为平面数组的内容:
const getObjectKeys = (obj, prefix = '') => {
  return Object.entries(obj).reduce((collector, [key, val]) => {
    const newKeys = [ ...collector, prefix ? `${prefix}.${key}` : key ]
    if (Object.prototype.toString.call(val) === '[object Object]') {
      const newPrefix = prefix ? `${prefix}.${key}` : key
      const otherKeys = getObjectKeys(val, newPrefix)
      return [ ...newKeys, ...otherKeys ]
    }
    return newKeys
  }, [])
}
console.log(getObjectKeys({a: 1, b: 2, c: { d: 3, e: { f: 4 }}}))
我不知道不那么冗长,但我的灵感是通过单行请求将以下内容强制转换为一行,但不知道它是多么 Pythonic ;)
var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);