Array.prototype.reverse
membalikkan isi array di tempat (dengan mutasi) ...
Apakah ada strategi yang sama sederhana untuk membalikkan array tanpa mengubah isi array asli (tanpa mutasi)?
javascript
arrays
sfletche
sumber
sumber
Jawaban:
Anda dapat menggunakan slice () untuk membuat salinan kemudian membalikkan () itu
Tampilkan cuplikan kode
sumber
If begin is omitted, slice begins from index 0.
- jadi sama denganarray.slice(0)
Dalam ES6:
sumber
[...].reverse
keunggulan dalam kasus uji yang sangat sederhana. jsperf.com/reverse-vs-slice-reverse/1.slice
secara signifikan lebih cepat.slice
kemungkinan lebih cepat b / c[...]
adalah generik iterable-to-array sehingga tidak dapat membuat banyak asumsi. Juga, kemungkinan yangslice
dioptimalkan lebih baik b / c sudah ada sejak lama.Varian ES6 lainnya:
Kita juga bisa menggunakan
.reduceRight()
untuk membuat array terbalik tanpa benar-benar membalikkannya.Sumber Daya Berguna:
Array.prototype.reduceRight()
Arrow Functions
Comma Operator
sumber
reduceRight
lambat af(a, c) => a.concat([c])
terasa lebih idiomatis daripada(a, c) => (a.push(c), a)
Coba solusi rekursif ini:
sumber
Alternatif ES6 menggunakan
.reduce()
dan menyebarkan.Pada dasarnya yang dilakukannya adalah membuat array baru dengan elemen berikutnya di foo, dan menyebarkan array yang terakumulasi untuk setiap iterasi setelah b.
Atau
.reduceRight()
seperti yang disebutkan di atas di sini, tetapi tanpa.push()
mutasi.sumber
Ada beberapa cara membalikkan array tanpa mengubah. Dua di antaranya
Tes kinerja http://jsben.ch/guftu
sumber
MENJADI Javascript biasa:
sumber
Membalikkan di tempat dengan variabel swap hanya untuk tujuan demonstratif (tetapi Anda memerlukan salinan jika Anda tidak ingin bermutasi)
sumber
es6:
sumber
1
pada akhirnya bisa saja lebih besar dari nol, karena itulah cara kerjaArray.prototype.sort
callback (atau disebut demikiancompare function
). Pada dasarnya Anda selalu membandingkan 2 angka dan dalam hal ini pengembalian kembali selalu positif sehingga dikatakan selalu pindah ke angka kedua di depan yang pertama :) ini sangat jelas: stackoverflow.com/questions/6567941/…sort()
bermutasi array (yaitu, mengurutkannya di tempat), yang ingin menghindari OP.