Я хочу использовать функцию 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

Есть предложения?

Robin Newhouse

Ответов: 13

Ответы (13)

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

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

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

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

Я предпочитаю написать функцию 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 ]
function mapRevers(reverse) {
    let reversed = reverse.map( (num,index,reverse) => reverse[(reverse.length-1)-index] );
    return reversed;
}

console.log(mapRevers(myArray));

I Вы передаете массив в карту Revers, а в функции возвращаете обратный массив. На карте cb вы просто берете значения с индексом от 10 (длина) до 1 из переданного массива

Другое решение:

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

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

Я думаю, поставить клавишу reverse () после того, как map заработает.

tbl_products
  .map((products) => (
    
  ))
  .reverse();

В моем случае работает

Вот мое решение TypeScript, которое одновременно O (n) и более эффективно, чем другие решения, за счет предотвращения двойного прохода через массив:

function reverseMap(arg: T[], fn: (a: T) => O) {
   return arg.map((_, i, arr) => fn(arr[arr.length - i - 1]))
}

В JavaScript:

const reverseMap = (arg, fn) => arg.map ((_, i, arr) => fn (arr [arr.length - 1 - i]))

// Или

function reverseMap (arg, fn) {
    return arg.map ((_, i, arr) => fn (arr [arr.length - i - 1]))
}

Вы можете использовать Array.prototype.reduceRight ()

var myArray = ["a", "b", "c", "d", "e"];
var res = myArray.reduceRight (function (arr, last, index, coll) {
    console.log (последний, индекс);
    возврат (arr = arr.concat (последний))
}, []);
console.log (res, myArray)

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

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

Старый вопрос, но для новых зрителей это лучший способ перевернуть массив с помощью карты

var myArray = ['a', 'b', 'c', 'd', 'e'];
[...myArray].map(() => myArray.pop());

Вам просто нужно добавить .slice (0) .reverse () перед .map ()

students.slice(0).reverse().map(e => e.id)

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

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

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

2022 WebDevInsider