Je veux utiliser la map()
fonction sur un tableau javascript, mais je voudrais qu'elle fonctionne dans l'ordre inverse.
La raison en est que je rends des composants React empilés dans un projet Meteor et que je souhaite que l'élément de niveau supérieur soit rendu en premier pendant que le reste charge les images ci-dessous.
var myArray = ['a', 'b', 'c', 'd', 'e'];
myArray.map(function (el, index, coll) {
console.log(el + " ")
});
imprime a b c d e
mais je souhaite qu'il y ait un mapReverse () qui a imprimée d c b a
Aucune suggestion?
javascript
arrays
Robin Newhouse
la source
la source
reverse
le tableau?map
retourne? Sinon, vous devriez envisagerforEach
.console.log(coll[coll.length - index - 1] + " ")
Réponses:
Si vous ne voulez pas inverser le tableau d'origine, vous pouvez en faire une copie superficielle puis mapper le tableau inversé,
myArray.slice(0).reverse().map(function(...
la source
slice(0)
n'est pas nécessaire carreverse()
renvoie un nouveau tableau et ne modifie pas le tableau actuel. @ AdamCooper86 j'espère que vous changez cela.reverse()
modifie le tableau d'origine.Ne mutant pas du tout le tableau, voici une solution O (n) à une seule ligne que j'ai trouvée:
myArray.map((val, index, array) => array[array.length - 1 - index]);
la source
val
n'est pas utilisé ici, donc je ne pense pas que ce soit ce que OP recherchait? (c'est toujours une bonne solution)Vous pouvez utiliser
Array.prototype.reduceRight()
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)
la source
Avec la fonction de rappel nommé
const items = [1, 2, 3]; const reversedItems = items.map(function iterateItems(item) { return item; // or any logic you want to perform }).reverse();
Raccourci (sans fonction de rappel nommée) - Syntaxe de flèche, ES6
const items = [1, 2, 3]; const reversedItems = items.map(item => item).reverse();
Voici le résultat
la source
Une autre solution pourrait être:
const reverseArray = (arr) => arr.map((_, idx, arr) => arr[arr.length - 1 - idx ]);
Vous travaillez essentiellement avec les index de tableau
la source
Je préfère écrire la fonction mapReverse une fois, puis l'utiliser. De plus, cela n'a pas besoin de copier le tableau.
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 ]
la source
function mapRevers(reverse) { let reversed = reverse.map( (num,index,reverse) => reverse[(reverse.length-1)-index] ); return reversed; } console.log(mapRevers(myArray));
I Vous passez le tableau à mapper Revers et dans la fonction vous renvoyez le tableau inversé. Dans la carte cb, vous prenez simplement les valeurs avec l'index comptant de 10 (longueur) à 1 à partir du tableau passé
la source
Voici ma solution TypeScript qui est à la fois O (n) et plus efficace que les autres solutions en empêchant une exécution dans le tableau deux fois:
function reverseMap<T, O>(arg: T[], fn: (a: T) => O) { return arg.map((_, i, arr) => fn(arr[arr.length - i - 1])) }
En JavaScript:
const reverseMap = (arg, fn) => arg.map((_, i, arr) => fn(arr[arr.length - 1 - i])) // Or function reverseMap(arg, fn) { return arg.map((_, i, arr) => fn(arr[arr.length - i - 1])) }
la source
Vous pouvez d'abord faire myArray.reverse ().
var myArray = ['a', 'b', 'c', 'd', 'e']; myArray.reverse().map(function (el, index, coll) { console.log(el + " ") });
la source
Une vieille question mais pour les nouveaux spectateurs, c'est le meilleur moyen d'inverser le tableau à l'aide de la carte
var myArray = ['a', 'b', 'c', 'd', 'e']; [...myArray].map(() => myArray.pop());
la source
[...myArray].map((_, _, arr) => arr.pop());
:?