JavaScript: Ruft den ersten und einzigen Eigenschaftsnamen des Objekts ab


Answers

Kürzeste Form:

instance[Object.keys(instance)[0]];

ES6 + Funktion:

let first = a => a[Object.keys(a)[0]];
first({a:'first', b:'second'}) // return 'first'
Question

Wenn ich die Eigenschaften eines Objekts aufzählen möchte und Prototypen ignorieren möchte, würde ich verwenden:

var instance = { ... };

for (var prop in instance) {
    if (instance.hasOwnProperty(prop)) {
        ... 
    }
}

Was ist, wenn die instance nur eine Eigenschaft hat und ich diesen Namen erhalten möchte? Gibt es einen einfacheren Weg als dies zu tun?

var instance = { id: "foobar" };

var singleMember = (function() {
    for (var prop in instance) {
        if (instance.hasOwnProperty(prop)) {
            return prop;
        }
    }
})();



Obwohl meine Antwort abgelehnt wird, ist es immer noch Wert zu wissen, dass es keine Reihenfolge von Schlüsseln in JavaScript-Objekten gibt. Daher kann theoretisch jeder auf iterierenden Werten basierende Code inkonsistent sein. Ein Ansatz könnte darin bestehen, ein Objekt zu erstellen und einen Setter zu definieren, der tatsächlich zählen, sortieren usw. bietet und einige Methoden bereitstellt, um auf diese Felder zuzugreifen. Dies könnte in modernen Browsern erfolgen.

Also, um Ihre Frage zu beantworten, im Allgemeinen nähern Sie sich immer noch am meisten clos-browser. Sie können iterieren mit lodash oder einem anderen modernen Framework, das die Komplexität von "hasOwnProperty" vor Ihnen versteckt. Ab Object.keys können Object.keys als Browser und universell akzeptiert werden. Immerhin ist IE8 vor Jahren passiert. Es gibt immer noch Fälle, in denen Sie nicht alle Schlüssel im Array speichern. Aber ich würde mit Object.keys gehen - es ist flexibler im Vergleich zur Iteration.