Saya ingin menggunakan map()
fungsi tersebut pada array javascript, tetapi saya ingin fungsi tersebut beroperasi dalam urutan terbalik.
Alasannya adalah, saya merender komponen React yang ditumpuk dalam proyek Meteor dan ingin elemen tingkat atas dirender terlebih dahulu sementara sisanya memuat gambar di bawah.
var myArray = ['a', 'b', 'c', 'd', 'e'];
myArray.map(function (el, index, coll) {
console.log(el + " ")
});
mencetak a b c d e
tetapi saya berharap ada mapReverse () yang dicetake d c b a
Ada saran?
javascript
arrays
Robin Newhouse
sumber
sumber
reverse
array?map
mengembalikan? Jika tidak, Anda harus mempertimbangkanforEach
.console.log(coll[coll.length - index - 1] + " ")
Jawaban:
Jika Anda tidak ingin membalikkan larik asli, Anda dapat membuat salinan dangkal darinya kemudian memetakan larik terbalik tersebut,
myArray.slice(0).reverse().map(function(...
sumber
slice(0)
diperlukan sebagaireverse()
mengembalikan larik baru dan tidak mengubah larik saat ini. @ AdamCooper86 saya harap Anda mengubahnya.reverse()
TIDAK mengubah array asli.Tidak mengubah array sama sekali, berikut adalah solusi O (n) satu baris yang saya buat:
myArray.map((val, index, array) => array[array.length - 1 - index]);
sumber
val
tidak digunakan di sini, jadi menurut saya ini bukan yang dicari OP? (ini masih merupakan solusi yang baik)Kamu bisa memakai
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)
sumber
Dengan fungsi panggilan balik bernama
const items = [1, 2, 3]; const reversedItems = items.map(function iterateItems(item) { return item; // or any logic you want to perform }).reverse();
Singkatan (tanpa fungsi panggilan balik bernama) - Sintaks Panah, ES6
const items = [1, 2, 3]; const reversedItems = items.map(item => item).reverse();
Inilah hasilnya
sumber
Solusi lain bisa jadi:
const reverseArray = (arr) => arr.map((_, idx, arr) => arr[arr.length - 1 - idx ]);
Anda pada dasarnya bekerja dengan indeks array
sumber
Saya lebih suka menulis fungsi mapReverse sekali, lalu menggunakannya. Ini juga tidak perlu menyalin array.
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 ]
sumber
function mapRevers(reverse) { let reversed = reverse.map( (num,index,reverse) => reverse[(reverse.length-1)-index] ); return reversed; } console.log(mapRevers(myArray));
I Anda meneruskan array untuk memetakan Pembalik dan dalam fungsi Anda mengembalikan array terbalik. Di peta cb Anda cukup mengambil nilai dengan indeks dihitung dari 10 (panjang) ke 1 dari larik yang dilewati
sumber
Berikut adalah solusi TypeScript saya yang O (n) dan lebih efisien daripada solusi lain dengan mencegah run melalui array dua kali:
function reverseMap<T, O>(arg: T[], fn: (a: T) => O) { return arg.map((_, i, arr) => fn(arr[arr.length - i - 1])) }
Dalam 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])) }
sumber
Anda bisa melakukan myArray.reverse () terlebih dahulu.
var myArray = ['a', 'b', 'c', 'd', 'e']; myArray.reverse().map(function (el, index, coll) { console.log(el + " ") });
sumber
Sebuah pertanyaan lama tetapi untuk pemirsa baru, ini adalah cara terbaik untuk membalikkan larik menggunakan peta
var myArray = ['a', 'b', 'c', 'd', 'e']; [...myArray].map(() => myArray.pop());
sumber
[...myArray].map((_, _, arr) => arr.pop());
?