Gibt ein undefiniertes Dilemma zurück: Enthüllung des Geheimnisses hinter Funktionen und Array-Iterationen
Im Bereich der Programmierung entsteht ein häufiges Rätsel bei der Verwendung von Funktionen und Array-Iterationen. Obwohl häufig eine Return-Anweisung verwendet wird, ist das Ergebnis möglicherweise immer noch undefiniert. Um die Gründe für dieses verwirrende Problem aufzudecken, untersuchen wir einen konkreten Fall mit einer Funktion namens getByKey, die versucht, ein Objekt aus einem Array basierend auf einem Schlüssel abzurufen.
The Enigma
Die getByKey-Funktion, die dazu gedacht ist, in einem Array von Objekten nach einem Objekt zu suchen, gibt durchweg undefiniert zurück. Trotz des Vorhandenseins einer Return-Anweisung in der inneren Callback-Funktion hat dieses rätselhafte Verhalten die Entwickler verblüfft.
Untersuchung der Lösung
Bei der Untersuchung stellt sich heraus, dass die Return Die Anweisung wird innerhalb der Rückruffunktion ausgeführt, die für die forEach-Methode bereitgestellt wird. Dies ist nicht dasselbe wie die Rückkehr von der getByKey-Funktion selbst. Um dieses Problem zu beheben, können wir entweder den Code so ändern, dass er die Map-Methode anstelle von forEach verwendet, oder wir können uns für eine herkömmliche for-Schleife entscheiden, die mehr Kontrolle über den Iterationsprozess bietet.
Optimierter Code mit Map
Mit der Map-Methode wandeln wir das Array in ein neues Array um, das die gewünschten Ergebnisse enthält. Für jedes Element im ursprünglichen Array wenden wir die Callback-Funktion an, die nach dem Schlüssel sucht und das passende Objekt zurückgibt.
function getByKey(key) { return data.map(function (val) { if (val.Key === key) { return val; } }).filter(function (val) { return val !== undefined; })[0]; }
Vereinfachte Lösung mit For-Schleife
Für eine höhere Effizienz können wir eine for-Schleife verwenden, um die Array-Elemente zu durchlaufen. Dieser Ansatz bietet eine direkte Kontrolle über die Schleife und ermöglicht es uns, sofort auszubrechen, wenn das passende Objekt gefunden wird.
function getByKey(key) { for (var i = 0; i < data.length; i++) { if (data[i].Key === key) { return data[i]; } } }
Die Subtilität verstehen
Es ist wichtig zu beachten dass die Rückruffunktion in forEach nicht direkt von der enthaltenden Funktion zurückkehrt. Die return-Anweisung innerhalb des Rückrufs wirkt sich auf die Ausführung des Rückrufs selbst aus, nicht jedoch auf den Ausführungsablauf der umschließenden Funktion. Daher ist es wichtig, die Platzierung von Return-Anweisungen bei der Arbeit mit Array-Iterationsfunktionen sorgfältig zu prüfen.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Funktion „Undefiniert' zurück, wenn ich Array-Iterationen verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!