Ответ 1
Если вы не хотите менять исходный массив, вы можете сделать мелкую копию, а затем карту реверсивного массива,
myArray.slice(0).reverse().map(function(...
Я хочу использовать функцию 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
Любые предложения?
Если вы не хотите менять исходный массив, вы можете сделать мелкую копию, а затем карту реверсивного массива,
myArray.slice(0).reverse().map(function(...
Вы можете использовать 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)
Совсем не изменяя массив, вот решение с одной строкой O (n), которое я придумал:
myArray.map((val, index) => myArray[myArray.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 ]
Другое решение может быть:
const reverseArray = (arr) => arr.map((_, idx, arr) => arr[arr.length - 1 - idx ]);
Вы в основном работаете с индексами массива
Используя распространяемый синтаксис, вы можете сделать массив для инвертирования проще, чем Array.prototype.map и Array.prototype.slice.
.Например:
{
const myArray = ['a', 'b', 'c', 'd', 'e'];
[...myArray].reverse().map(el => console.log(el + " "));
}
С именованной функцией обратного вызова
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();
Вот результат
Вы можете сначала выполнить myArray.reverse().
var myArray = ['a', 'b', 'c', 'd', 'e'];
myArray.reverse().map(function (el, index, coll) {
console.log(el + " ")
});