Ich möchte die map()
Funktion in einem Javascript-Array verwenden, möchte aber, dass sie in umgekehrter Reihenfolge ausgeführt wird.
Der Grund dafür ist, dass ich gestapelte React-Komponenten in einem Meteor-Projekt rendere und möchte, dass das Element der obersten Ebene zuerst gerendert wird, während der Rest die folgenden Bilder lädt.
var myArray = ['a', 'b', 'c', 'd', 'e'];
myArray.map(function (el, index, coll) {
console.log(el + " ")
});
druckt aus, a b c d e
aber ich wünschte, es gäbe eine mapReverse (), die gedruckt wurdee d c b a
Irgendwelche Vorschläge?
javascript
arrays
Robin Newhouse
quelle
quelle
reverse
das Array?map
zurückgibt? Ansonsten sollten Sie berücksichtigenforEach
.console.log(coll[coll.length - index - 1] + " ")
Antworten:
Wenn Sie das ursprüngliche Array nicht umkehren möchten, können Sie eine flache Kopie davon erstellen und dann das umgekehrte Array zuordnen.
quelle
slice(0)
wird nicht alsreverse()
Rückgabe eines neuen Arrays benötigt und ändert das aktuelle Array nicht. @ AdamCooper86 Ich hoffe du änderst das.reverse()
Ändert das ursprüngliche Array.Sie können verwenden
Array.prototype.reduceRight()
quelle
Hier ist eine einzeilige O (n) -Lösung, die ich mir ausgedacht habe:
quelle
val
wird hier nicht verwendet, also glaube ich nicht, dass dies das ist, wonach OP gesucht hat? (Es ist immer noch eine gute Lösung)Mit benannter Rückruffunktion
Kurzform (ohne benannte Rückruffunktion) - Pfeilsyntax, ES6
Hier ist das Ergebnis
quelle
Eine andere Lösung könnte sein:
Sie arbeiten grundsätzlich mit den Array-Indizes
quelle
Ich schreibe die mapReverse-Funktion lieber einmal und benutze sie dann. Auch dies muss das Array nicht kopieren.
quelle
Hier ist meine TypeScript-Lösung, die sowohl O (n) als auch effizienter als die anderen Lösungen ist, indem sie verhindert, dass das Array zweimal durchlaufen wird:
In JavaScript:
quelle
Sie können zuerst myArray.reverse () ausführen.
quelle
Eine alte Frage, aber für neue Betrachter ist dies der beste Weg, um das Array mithilfe der Karte umzukehren
quelle
[...myArray].map((_, _, arr) => arr.pop());
?