557 Stimmen

For..In-Schleifen in JavaScript - Schlüssel-Wert-Paare

Ich habe mich gefragt, ob es eine Möglichkeit gibt, so etwas wie eine PHP foreach Schleife in JavaScript. Die Funktionalität, die ich suche, ist so etwas wie dieses PHP-Snippet:

foreach($data as $key => $value) { }

Ich habe mir die JS for..in Schleife, aber es scheint keine Möglichkeit zu geben, die as . Wenn ich dies mit einer "normalen" for-Schleife mache ( for(var i = 0; i < data.length; i++ ), gibt es eine Möglichkeit, die Schlüssel => Wertpaare zu erfassen?

28voto

Felix Kling Punkte 751464

Ich nehme an, Sie wissen, dass i der Schlüssel ist und dass Sie den Wert über data[i] (und möchte einfach nur eine Abkürzung dafür haben).

ECMAScript5 eingeführt forEach [MDN] für Arrays (es scheint, dass Sie ein Array haben):

data.forEach(function(value, index) {

});

Die MDN-Dokumentation bietet ein Shim für Browser, die dies nicht unterstützen.

Dies funktioniert natürlich nicht für Objekte, aber Sie können eine ähnliche Funktion für sie erstellen:

function forEach(object, callback) {
    for(var prop in object) {
        if(object.hasOwnProperty(prop)) {
            callback(prop, object[prop]);
        }
    }
}

Da Sie die Frage mit einem Tag versehen haben jquery bietet jQuery $.each [docs] die sowohl über Array- als auch über Objektstrukturen schleift.

12voto

Tonatio Punkte 3326

Es gibt drei Möglichkeiten, mit Schlüsseln und Werten eines Objekts umzugehen:

  1. Werte auswählen:

    Object.values(obj).forEach(value => ...);
  2. Tasten auswählen:

    Object.keys(obj).forEach(key => ...);
  3. Schlüssel und Werte auswählen:

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

10voto

Siddhu Punkte 381
for (var key in myMap) {
    if (myMap.hasOwnProperty(key)) {
        console.log("key =" + key);
        console.log("value =" + myMap[key]);
    }
}

In Javascript hat jedes Objekt eine Reihe von eingebauten Schlüssel-Wert-Paaren, die Meta-Informationen haben. Wenn Sie Schleife durch alle Schlüssel-Wert-Paare für ein Objekt sind Sie Schleife durch sie zu. Die Verwendung von hasOwnProperty() filtert diese aus.

9voto

Christoph Winkler Punkte 6118

Sie können die for..in dafür.

for (var key in data)
{
    var value = data[key];
}

7voto

ife Punkte 1071
let test = {a: 1, b: 2, c: 3};
Object.entries(test).forEach(([key, value]) => console.log(key, value))

// a 1
// b 2
// c 3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X