获取对象键的数组

Ric*_*ard 338 javascript ecmascript-5

我希望将JavaScript对象的键作为数组,在jQuery或纯JavaScript中.

有没有比这更简洁的方式?

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

Ray*_*nos 579

var foo = {
  'alpha': 'puffin',
  'beta': 'beagle'
};

var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered).
Run Code Online (Sandbox Code Playgroud)

使用Object.keys.

这是ES5功能.这意味着它适用于所有现代浏览器,但不适用于旧版浏览器.

ES5-shim有一个你可以偷实现Object.keys

  • 注意:这仅适用于现代浏览器(我的意思是不是IE <9). (5认同)
  • 那么移动浏览器呢? (2认同)
  • 在我意识到这是一个静态类方法之前,我尝试将键作为实例的属性调用的次数......对 api 的理解-- (2认同)

Roc*_*mat 59

你可以使用jQuery $.map.

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

  • 对我来说,如果Object.keys()在IE8中不起作用,这个解决方案要好得多...... (3认同)

ale*_*lex 32

当然,这Object.keys()是获取Object键的最佳方式.如果它在您的环境中不可用,则可以使用代码(例如在您的示例中)进行简单的填充(除非您需要考虑您的循环将迭代原型链上的所有属性,这与Object.keys()行为不同).

但是,你的示例代码......

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

jsFiddle.

......可以修改.您可以在变量部分中进行分配.

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

jsFiddle.

当然,这种行为与Object.keys()实际不同(jsFiddle).您可以简单地在MDN文档中使用填充程序.

  • 我喜欢这个`var keys = [],i = 0; for(keys [i ++] in foo){}`+1 (8认同)
  • 所有这些解决方案都需要`hasOwnProperty()`检查,当然? (2认同)

Cod*_*niz 8

如果您在这里寻找将 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 }}}))
Run Code Online (Sandbox Code Playgroud)


Geo*_*pty 6

我不知道更少冗长,但我受到启发,通过单线请求将以下内容强制到一行,不知道它是如何Pythonic;)

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

  • 也许应该是`var enumerableKeysOnThePrototypeChain`;) (3认同)

Wil*_*een 5

概括

要获取对象的所有键,您可以使用Object.keys(). Object.keys()接受一个对象作为参数并返回所有键的数组。

例子:

const object = {
  a: 'string1',
  b: 42,
  c: 34
};

const keys = Object.keys(object)

console.log(keys);

console.log(keys.length) // we can easily access the total amount of properties the object has
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我们将键数组存储在键 const 中。然后,我们可以通过检查键数组的长度轻松访问对象上的属性数量。

获取值:Object.values()

的互补函数Object.keys()Object.values()。该函数接受一个对象作为参数并返回一个值数组。例如:

const object = {
  a: 'random',
  b: 22,
  c: true
};


console.log(Object.values(object));
Run Code Online (Sandbox Code Playgroud)