attribute auslesen - Wie listet man die Eigenschaften eines JavaScript-Objekts auf?
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 */
}
}
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"]
Beachten Sie, dass Object.keys und andere ECMAScript 5-Methoden von Firefox 4, Chrome 6, Safari 5, IE 9 und höher unterstützt werden.
Beispielsweise:
var o = {"foo": 1, "bar": 2};
alert(Object.keys(o));
ECMAScript 5 Kompatibilitätstabelle: kangax.github.com/es5-compat-table
Beschreibung neuer Methoden: http://markcaudill.com/index.php/2009/04/javascript-new-features-ecma5/
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
undObject.keys
gehen nicht die Prototyp-Kette hinauf, um diebase
zu finden -
for in
tut
Weitere Informationen über die Prototypkette finden Sie hier: https://.com/a/23877420/895245
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
Unter Browsern, die js 1.8 unterstützen:
[i for(i in obj)]
IE unterstützt nicht (i in obj) für native Eigenschaften. Hier ist eine Liste aller Requisiten, die ich finden konnte.
Es scheint, dass einige dumme Filterung macht.
Die Liste steht am Ende dieses Google Group Posts zur Verfügung: https://groups.google.com/group/hackvertor/browse_thread/thread/a9ba81ca642a63e0
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;
};