Wie listet man die Eigenschaften eines JavaScript-Objekts auf?


7 Answers

Wie slashnick darauf hingewiesen hat, können Sie das "for in" slashnick verwenden, um über ein Objekt für seine Attributnamen zu iterieren. Sie werden jedoch über alle Attributnamen in der Prototypkette des Objekts iterieren. Wenn Sie nur über die eigenen Attribute des Objekts iterieren möchten, können Sie die Methode Object#hasOwnProperty() verwenden. Also folgendes haben.

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        /* useful code here */
    }
}
Question

Sprich ich erstelle ein Objekt so:

var myObject =
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

Was ist der beste Weg, um eine Liste der Eigenschaftsnamen abzurufen? dh ich möchte mit einigen variablen "Schlüsseln" enden, so dass:

keys == ["ircEvent", "method", "regex"]



Unter Browsern, die js 1.8 unterstützen:

[i for(i in obj)]



Object.getOwnPropertyNames(obj)

Diese Funktion zeigt zusätzlich zu den von Object.keys(obj) angezeigten nicht aufzählbaren Eigenschaften.

In JS hat jede Eigenschaft einige Eigenschaften, einschließlich einer Booleschen enumerable .

Im Allgemeinen sind nicht aufzählbare Eigenschaften eher "internalisch" und werden weniger häufig verwendet, aber es ist aufschlussreich, manchmal in sie hineinzuschauen, um zu sehen, was wirklich vor sich geht.

Beispiel:

var o = Object.create({base:0})
Object.defineProperty(o, 'yes', {enumerable: true})
Object.defineProperty(o, 'not', {enumerable: false})

console.log(Object.getOwnPropertyNames(o))
// [ 'yes', 'not' ]

console.log(Object.keys(o))
// [ 'yes' ]

for (var x in o)
    console.log(x)
// yes, base

Beachten Sie auch, wie:

  • Object.getOwnPropertyNames und Object.keys gehen nicht die Prototyp-Kette hinauf, um die base zu finden
  • for in tut

Weitere Informationen über die Prototypkette finden Sie hier: https://.com/a/23877420/895245










Aufbauend auf der angenommenen Antwort.

Wenn das Objekt Eigenschaften hat, die Sie aufrufen wollen, sagen Sie .properties () versuchen Sie es!

var keys = Object.keys(myJSONObject);

for (j=0; j < keys.length; j++) {
  Object[keys[i]].properties();
}



Sie können eine wiederverwendbare Komponente für Objektwerte verwenden, um alle Objektwerte abzurufen.

Beispiel:

values({ a: 1, b: 2, c: 3 }) // => [1, 2, 3]

Wie es funktioniert:

function values(object: {[any]: any}): any[] {
  const objValues = [];
  forEach(object, val => objValues.push(val)); 
  return objValues;
};



Wenn Sie versuchen, nur die Elemente zu erhalten, aber nicht die Funktionen, dann kann Ihnen dieser Code helfen

this.getKeys = function() {

    var keys = new Array();
    for(var key in this) {

        if( typeof this[key] !== 'function') {

            keys.push(key);
        }
    }
    return keys;
}

Dies ist Teil meiner Implementierung der HashMap und ich möchte nur die Schlüssel, "das" ist das Hashmapping-Objekt, das die Schlüssel enthält




Related



Tags

javascript javascript