2016-04-05 13 views
24

Ich möchte die map() Funktion auf einem Javascript-Array verwenden, aber ich möchte, dass es in umgekehrter Reihenfolge funktioniert.Gibt es eine Möglichkeit, map() für ein Array in umgekehrter Reihenfolge mit Javascript zu verwenden?

Der Grund ist, dass ich gestapelte React-Komponenten in einem Meteor-Projekt rendere und möchte, dass das Top-Level-Element zuerst rendert, während der Rest Bilder darunter lädt.

var myArray = ['a', 'b', 'c', 'd', 'e']; 
myArray.map(function (el, index, coll) { 
    console.log(el + " ") 
}); 

druckt a b c d e aber ich wünschte, ein mapReverse() gab es die e d c b a gedruckt

Irgendwelche Vorschläge?

+2

Warum "kehren" Sie das Array nicht um? – John

+2

Um die Elemente zu ordnen, setze ich den Z-Index nach dem Array-Index. Ich nehme an, ich könnte den Z-Index negativ einstellen. –

+0

Klingt nach einer guten Idee. – John

Antwort

38

Wenn Sie das Original-Array umkehren nicht möchten, können Sie eine flache Kopie davon dann Karte des reversed Array machen,

myArray.slice(0).reverse().map(function(... 
+0

Ich habe am Ende nur den negativen Index verwendet, um den Z-Index anzugeben, aber in der Art, wie ich die Frage umrahmte, ist dies die korrekteste. –

+0

Warum brauchen wir .slice (0)? Warum nicht myArray.reverse() anstelle von myArray.slice (0) .reverse()? Sieht aus wie die Antwort für meinen Kommentar ist hier: https://stackoverflow.com/questions/5024085/whats-the-point-of-slice0-here – Haradzieniec

+0

Haradzieniec - Es geht mit den Einzelheiten für wie die ursprüngliche Frage eingerahmt wurde, in dass die ursprüngliche Reihenfolge erforderlich war, um eine Z-Index-CSS-Eigenschaft festzulegen, aber in umgekehrter Reihenfolge gedruckt wurde. – AdamCooper86

-1

Sie können myArray.reverse() zuerst ausführen.

var myArray = ['a', 'b', 'c', 'd', 'e']; 
myArray.reverse().map(function (el, index, coll) { 
    console.log(el + " ") 
}); 
+0

Das wäre meine Lösung im Allgemeinen, aber im Setup verwende ich die oberste Karte ist mit dem letzten Index platziert. Ich denke, nur eine bessere Indexierung könnte das Problem lösen. –

+11

Nur als eine Notiz, dies wird das ursprüngliche Array an Ort und Stelle umkehren, was bedeutet, dass es die Reihenfolge des Arrays destruktiv ändern wird. – AdamCooper86

6

können Sie Array.prototype.reduceRight() verwenden

var myArray = ["a", "b", "c", "d", "e"]; 
 
var res = myArray.reduceRight(function (arr, last, index, coll) { 
 
    console.log(last, index); 
 
    return (arr = arr.concat(last)) 
 
}, []); 
 
console.log(res, myArray)

0

ich bevorzuge es wri Verwenden Sie die mapReverse-Funktion einmal und verwenden Sie sie dann. Auch dies muss das Array nicht kopieren.

function mapReverse(array, fn) { 
    return array.reduceRight(function (result, el) { 
     result.push(fn(el)); 
     return result; 
    }, []); 
} 

console.log(mapReverse([1, 2, 3], function (i) { return i; })) 
// [ 3, 2, 1 ] 
console.log(mapReverse([1, 2, 3], function (i) { return i * 2; })) 
// [ 6, 4, 2 ] 
Verwandte Themen