Javascript Objekte mit for in durchlaufen

for in durchläuft alle aufzählbaren Eigenschaften eines Objekts. Das Schöne an der for in-Anweisung ist, dass die Anzahl der Elemente nicht zuvor festgestellt werden muss, die Namen der Elemente nicht bekannt sein müssen und keine Endlos-Schleife zu befürchten ist.

for in über Objekte iterieren

Javascript for in

Javascript Objekte haben keinen sequentiellen Index wie Arrays. for in ist ein Sonderfall der for-Anweisung und dient allein der Iteration durch Objekte. In jeder Iteration wird einem Element des Objekts der Variablenname key zugewiesen. Wenn alle Eigenschaften bearbeitet sind, endet der Loop.

for (key in myObject) {
   key ist der Key des aktuellen Elements
   myObject[key] ist der aktuelle Wert
   Anweisungen;
}

Bei Objekten durchläuft for in alle Eigenschaften eines Objekts.

<ul class="links">
</ul>
const info = {
	"tutorials" : "HTML, CSS und Javascript",
	"website" : "mediaevent.de",
	"links" : {
		"HTML"      : "https://www.mediaevent.de/html/",
		"CSS"       : "https://www.mediaevent.de/css/",
		"JavaScript": "https://www.mediaevent.de/javascript/",
		"Tutorial"  : "https://www.mediaevent.de/tutorial/",
		"SVG"       : "https://www.mediaevent.de/tutorial/svg.html"
	}
}

let output = "";
for (key in info.links) {
	if (info.links.hasOwnProperty(key )) {
		output += `<li><a href="${info.links[key]}"> ${key}</a></li>`;
	}
}

document.querySelector ("ul.links").innerHTML = output;

info.links[key] wird zwar mit eckigen Klammern wie ein Array notiert, aber spricht das Objekt mit der Liste der Links an.

for in-Anweisungen sollten immer prüfen, ob nicht weitere Scripte (weder eigene oder Libraries) eigene Eigenschaften hinzugefügt haben. if (info.links.hasOwnProperty(key)) verhindert, dass Eigenschaften, die von anderen Scripten hinzugefügt wurden, in die Liste geraten.




			

for in kann heute auch durch foreach ersetzt werden, der modernen Variante des klassischen for-Loops.

Reihenfolge der Eigenschaften von Objekten

Problematisch beim FOR IN ist, dass die Reihenfolge der Elemente nicht sicher gestellt ist, sondern letztendlich nur eine ungeordnete Liste.

Wenn die Reihenfolge doch eine Rolle spielt, sind die Daten in einem Array besser untergebracht. Das bringt einiges mehr an Schreibarbeit.

const info = {
	"tutorials" : "HTML, CSS und Javascript",
	"website" : "mediaevent.de",
	"links" : [
		{"HTML"      : "https://www.mediaevent.de/html/"},
		{"CSS"       : "https://www.mediaevent.de/css/"},
		{"JavaScript": "https://www.mediaevent.de/javascript/"},
		{"Tutorial"  : "https://www.mediaevent.de/tutorial/"},
		{"SVG"       : "https://www.mediaevent.de/tutorial/svg.html"}
	]
}

let out = "";
for (let i=0; i<info.links.length; i++) {
	for (key in info.links[i]) {
		if (info.links[i].hasOwnProperty(key)) {
			out += "<li>" + "<a hef='" + info.links[i][key] +  "'>" + key + "</a></li>";
		}
	}
}

document.querySelector("ul.links").innerHTML = out;

for in vs for of

Das gibts auch: Während for in über die Eigenschaften eines Objekts iteriert,läuft for of durch die Werte von iterablen Objekten. Für die NodeList aus querySelectorAll zurückgegeben wird, ist for of wie gebacken:

node list item
node list item
node list item
const nodes = document.querySelectorAll (".item");
for (const item of nodes) {
  item.setAttribute ("style", "border:4px solid #7BB9CA");
}

Object.keys() – Objekte in Arrays umwandeln

Object.keys() gibt ein Array mit den Eigenschaften des Objektes zurück. Die Elemente des Arrays haben dieselben Reihenfolge wie in einer for in-Schleife

var obj = { 100: "Waldfrüchte", 50: "Beeren", 200: "Kulturpflanzen", 2: "Getreide"};

Object.keys(obj).forEach (function (val, key) {
   result1.innerHTML += "index[" + key + "] " + val + " " + obj[val] + "<br>";
});

for (var key in obj) {
   result2.innerHTML += "for in: " + key + ' : ' + obj[key] + "<br>";
}

forEach mit Object.keys


for in


Object.keys wird von allen modernen Browsern (IE ab Version 9) unterstützt.

Neben Object.keys wandeln weitere Funktionen Objekte in Arrays um:

const fruity = {
	"Regen": "",
	"Sonne": "",
	"Schnee": ""
}

Object.values (fruity) = ["", "", ""];

Object.entries (fruity) = [["Regen",""], ["Sonne",""], ["Schnee",""]];



		

for- und while-Schleifen im Vergleich

Schleife Beste Nutzung
for Feste Anzahl von Durchläufen (z. B. for (let i = 0; i < 10; i++))
for...of Durch Arrays, Strings, Maps, Sets iterieren, unterbrechen mit break, continue, gut für await/async.
.forEach( item => {}) Keine Variable für den Index benötigt
for...in Über Objekt-Eigenschaften iterieren (Achtung: Auch Prototyp-Eigenschaften werden mitgenommen!)
while Wenn die Anzahl der Durchläufe unklar ist
do...while Falls der Code mindestens einmal laufen soll
Suchen auf mediaevent.de