Di coffeescript ini langsung:
coffee> a = ['a', 'b', 'program']
[ 'a', 'b', 'program' ]
coffee> [_..., b] = a
[ 'a', 'b', 'program' ]
coffee> b
'program'
Apakah es6 memungkinkan sesuatu yang serupa?
> const [, b] = [1, 2, 3]
'use strict'
> b // it got the second element, not the last one!
2
> const [...butLast, last] = [1, 2, 3]
SyntaxError: repl: Unexpected token (1:17)
> 1 | const [...butLast, last] = [1, 2, 3]
| ^
at Parser.pp.raise (C:\Users\user\AppData\Roaming\npm\node_modules\babel\node_modules\babel-core\node_modules\babylon\lib\parser\location.js:24:13)
Tentu saja saya bisa melakukannya dengan cara es5 -
const a = b[b.length - 1]
Tapi mungkin ini sedikit rentan terhadap satu kesalahan. Bisakah percikan hanya menjadi hal terakhir dalam penghancuran?
ecmascript-6
destructuring
George Simms
sumber
sumber
...
di es6, terutama bahwa ini hanya dapat digunakan sebagai hal terakhir saat merusak atau dalam daftar parameter. Ini berpotensi berlawanan dengan intuisi seseorang yang masuk ke es6 dari coffeescript dan dengan demikian pertanyaan ini berpotensi berguna.[1,2,3].slice(-1)
Anda bahkan tidak dapat merusak setara dengan[1,2,3].slice(0, -1)
. Ini adalah operasi umum. Penghancuran ES6 entah bagaimana adalah lelucon!Jawaban:
Tidak mungkin dalam ES6 / 2015. Standar tidak menyediakannya.
Seperti yang Anda lihat di spesifikasi ,
FormalParameterList
bisa berupa:FunctionRestParameter
FormalsList
(daftar paramet)FormalsList
, diikuti dengan aFunctionRestParameter
Memiliki
FunctionRestParameter
diikuti oleh parameter tidak disediakan.sumber
sumber
pop
versinya lebih cepat (OS X, Chrome 68).Saya yakin ES6 setidaknya bisa membantu dengan itu:
Mengingat array Anda (arr) tidak terdefinisi dan elemen yang dapat diulang (ya, bahkan string berfungsi !!), ia harus mengembalikan elemen terakhir..bahkan untuk array kosong dan itu juga tidak mengubahnya. Ini membuat array perantara .. tapi itu tidak membutuhkan biaya banyak.
Contoh Anda akan terlihat seperti ini:
sumber
.slice(-1)[0]
sedikit lebih baik, atauvar [last]=arr.slice().reverse()
jelek lainnya jika Anda membutuhkanvar [last] = arr.slice(-1)
Object.defineProperty(Array.prototype, -1, { get() {return this[this.length - 1] } }); [1,2,3][-1]
[].concat(arr).pop();
yang tidak bermutasiarr
.Anda dapat merusak susunan terbalik untuk mendekati apa yang Anda inginkan.
sumber
const last = ['bbb', 'uuu', 'iii'].slice(-1);
? Dalam hal pertunjukan?.slice(-1)
secara teknis lebih cepat, tetapi tidak memberikan Anda berdua item terakhir DAN subarray dalam satu panggilan, yang merupakan keuntungan dari...
percikan saat destrukturisasi. Hit kinerja pembalikan dua kali harus dipertimbangkan ketika digunakan pada array yang lebih panjang, tetapi untuk skrip kecil mungkin sepadan dengan kenyamanannya? Tapi Anda bisa dengan mudahlet a = array.slice(-1), rest = array.slice(0,array.length-2)
jika Anda masih menginginkan oneliner di ES5, yaitu ~ 4% lebih cepat. jsperf.com/last-array-splatpendekatan lain adalah:
sumber
Belum tentu cara yang paling baik dalam melakukannya. Tetapi tergantung pada konteksnya, cara yang cukup elegan adalah:
sumber
sumber
Ini harus bekerja:
sumber
Anda dapat mencoba retasan ini:
sumber
Jelas, pertanyaannya adalah tentang Penghancuran untuk Array JavaScript, dan kami tahu tidak mungkin memiliki item terakhir dari Array dengan menggunakan tugas penghancuran, ada cara untuk melakukannya agar tidak dapat diubah , lihat yang berikut ini:
Kami tidak mengubah
arr
variabel tetapi masih memiliki semua anggota array kecuali item terakhir sebagai array dan memiliki item terakhir secara terpisah.sumber
sumber
Bukan cara yang merusak tetapi bisa membantu. Menurut dokumentasi javascript dan metode terbalik dapat mencoba ini:
sumber