502 Stimmen

Array der Schlüssel des Objekts abrufen

Ich möchte die Schlüssel eines JavaScript-Objekts als Array erhalten, entweder in jQuery oder reinem JavaScript.

Gibt es einen weniger ausführlichen Weg als diesen?

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

796voto

Raynos Punkte 162170

Utilice 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).

Dies ist eine ES5-Funktion. Das heißt, sie funktioniert in allen modernen Browsern, aber funktioniert nicht in älteren Browsern .

Das ES5-Shim hat eine Umsetzung von Object.keys du kannst stehlen

62voto

Rocket Hazmat Punkte 213999

Sie können jQuery's $.map .

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

40voto

alex Punkte 457905

Ja, natürlich, Object.keys() ist die mejor Weg, um die Schlüssel eines Objekts zu erhalten. Wenn es in Ihrer Umgebung nicht verfügbar ist, kann es trivial sein unterbrochen mit Code wie in Ihrem Beispiel (außer dass Sie berücksichtigen müssen, dass Ihre Schleife über alle Eigenschaften in der Prototypenkette iteriert, im Gegensatz zu Object.keys() Verhalten).

Allerdings ist Ihr Beispielcode...

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

jsFiddle .

...könnte geändert werden. Sie können die Zuordnung direkt im variabel Teil.

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

jsFiddle .

Natürlich ist dieses Verhalten anders als das, was Object.keys() tatsächlich tut ( jsFiddle ). Sie könnten einfach die Unterlegscheibe in der MDN-Dokumentation .

18voto

Cody Moniz Punkte 4317

Falls Sie hier etwas suchen, um die Schlüssel eines n-tiefen verschachtelten Objekts als flaches Array aufzulisten:

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 }}}))

8voto

Dexygen Punkte 12014

Ich weiß nicht, über weniger wortreich, aber ich war inspiriert, die folgenden auf eine Zeile durch die Ein-Zeilen-Anfrage zu zwingen, weiß nicht, wie Pythonic es ist aber ;)

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X