Подтвердить что ты не робот

Есть ли способ использовать map() для массива в обратном порядке с javascript?

Я хочу использовать функцию map() в массиве javascript, но я бы хотел, чтобы она работала в обратном порядке.

Причина в том, что я рендеринг сложенных компонентов React в проекте Meteor и хотел бы, чтобы элемент верхнего уровня отображался первым, а остальные изображения загрузки ниже.

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

выводит a b c d e, но мне жаль, что не было mapReverse(), которое напечатало e d c b a

Любые предложения?

4b9b3361

Ответ 1

Если вы не хотите менять исходный массив, вы можете сделать мелкую копию, а затем карту реверсивного массива,

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

Ответ 2

Вы можете использовать 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)

Ответ 3

Совсем не изменяя массив, вот решение с одной строкой O (n), которое я придумал:

myArray.map((val, index) => myArray[myArray.length - 1 - index]);

Ответ 4

Я предпочитаю написать функцию mapReverse один раз, а затем использовать ее. Также для этого не нужно копировать массив.

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 ]

Ответ 5

Другое решение может быть:

const reverseArray = (arr) => arr.map((_, idx, arr) => arr[arr.length - 1 - idx ]);

Вы в основном работаете с индексами массива

Ответ 7

С именованной функцией обратного вызова

const items = [1, 2, 3]; 
const reversedItems = items.map(function iterateItems(item) {
  return item; // or any logic you want to perform
}).reverse();

Сокращения (без именованной функции обратного вызова) - Синтаксис стрелки, ES6

const items = [1, 2, 3];
const reversedItems = items.map(item => item).reverse();

Вот результат

enter image description here

Ответ 8

Вы можете сначала выполнить myArray.reverse().

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