Frage Iteriere durch Objekteigenschaften


var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    alert(propt + ': ' + obj[propt]);
}

Wie funktioniert die Variable? propt repräsentieren die Eigenschaften des Objekts? Es ist keine integrierte Methode oder Eigenschaft. Warum kommt es dann auf jede Eigenschaft im Objekt?


1512
2017-11-29 14:30


Ursprung


Antworten:


Iterieren über Eigenschaften erfordert dies zusätzlich hasOwnProperty prüfen:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

Dies ist erforderlich, da der Prototyp eines Objekts zusätzliche Eigenschaften für das Objekt enthält, die technisch Teil des Objekts sind. Diese zusätzlichen Eigenschaften werden von der Basisobjektklasse geerbt, sind aber immer noch Eigenschaften von object.

hasOwnProperty überprüft einfach, ob dies eine Eigenschaft ist, die für diese Klasse spezifisch ist, und nicht eine, die von der Basisklasse geerbt wurde.


2052
2018-05-24 12:38



Ab JavaScript 1.8.5 können Sie verwenden Object.keys(obj) um ein Array von Eigenschaften zu erhalten, die für das Objekt selbst definiert sind (diejenigen, die für obj.hasOwnProperty(key)).

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

Dies ist besser (und lesbarer) als die Verwendung einer For-In-Schleife.

Es wird auf diesen Browsern unterstützt:

  • Firefox (Gecko): 4 (2.0)
  • Chrome: 5
  • Internet Explorer: 9

Sehen das Mozilla-Entwickler-Netzwerk Object.keys ()'s Referenz für weitere Informationen.


773
2017-08-13 07:19



Es ist das for...in statement (MDN, ECMAScript-Spezifikation).

Du kannst es lesen als "ZUM jede Eigenschaft IM das obj Objekt, weisen Sie jede Eigenschaft dem Objekt zu PROPT Variable wiederum ".


189
2017-11-29 14:32



Mädchen und Jungs sind wir 2017 und wir haben nicht so viel Zeit zum Tippen ... Also machen wir dieses coole, neue, ausgefallene ECMAScript 2016:

Object.keys(obj).forEach(e => console.log(`key=${e}  value=${obj[e]}`));

142
2017-11-22 08:47



In kommenden Versionen von ES können Sie verwenden Object.entries:

for (const [key, value] of Object.entries(obj)) { }

oder

Object.entries(obj).forEach(([key, value]) => ...)

Wenn Sie nur über die Werte iterieren möchten, verwenden Sie Object.values:

for (const value of Object.values(obj)) { }

oder

Object.values(obj).forEach(value => ...)

57
2017-09-13 06:41



Es ist nur ein for...in Schleife. Auschecken die Dokumentation bei Mozilla.


37
2017-11-29 14:33



Mit jquery können Sie das jetzt tun:

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

20
2018-03-29 15:19