Dalam bahasa lain seperti Python 2 dan Python 3, Anda dapat menentukan dan menetapkan nilai ke variabel tuple, dan mengambil nilainya seperti ini:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Apakah ada yang serupa di JavaScript? Atau apakah saya hanya harus melakukannya dengan cara yang jelek dengan sebuah array:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Apakah ada cara yang lebih baik untuk mensimulasikan tupel Python di JavaScript 5?
Pembaruan: Lihat jawaban mengenai ES6, yang seharusnya lebih disukai daripada CoffeeScript untuk proyek baru.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
Ini sedikit lebih banyak mengetik, tapi jelek mungkin berlebihan.Jawaban:
Javascript 1.7 menambahkan tugas yang dirusak yang memungkinkan Anda untuk melakukan apa yang Anda cari.
sumber
Anda harus melakukannya dengan cara yang jelek. Jika Anda benar - benar menginginkan sesuatu seperti ini, Anda dapat melihat CoffeeScript , yang memiliki itu dan banyak fitur lain yang membuatnya lebih mirip python (maaf membuatnya terdengar seperti iklan, tapi saya sangat menyukainya.)
sumber
Anda dapat melakukan hal serupa:
dan kemudian merujuk pada nama dan usia sebagai atribut
sumber
Object.freeze()
, yaitu:tuple = Object.freeze({ name:'Bob', age:14 })
Fitur "tuple" ini disebut penghancuran di EcmaScript2015 dan akan segera didukung oleh browser terbaru. Untuk saat ini, hanya Firefox dan Chrome yang mendukungnya .
Tapi, hei, Anda bisa menggunakan transpiler .
Kode akan terlihat bagus seperti python:
sumber
Array beku berperilaku identik dengan tupel python:
Bersikaplah mewah dan tentukan kelas
Bekerja hari ini di semua browser terbaru.
sumber
Tuple tidak didukung di JavaScript
Jika Anda mencari daftar yang tidak dapat diubah, Object.freeze () dapat digunakan untuk membuat sebuah array tidak dapat diubah.
Sumber: Jaringan Pengembang Mozilla - Object.freeze ()
Tetapkan sebuah array seperti biasa tetapi kunci itu menggunakan 'Object.freeze ()
Gunakan nilai seperti yang Anda lakukan pada array biasa (multi-assignment python tidak didukung)
Mencoba menetapkan nilai baru
Tapi nilainya tidak berubah
sumber
Sayangnya Anda tidak dapat menggunakan sintaks tugas tuple itu di (ECMA | Java) Script.
EDIT: Seseorang yang ditautkan ke Mozilla / JS 1.7 - ini tidak akan berfungsi lintas-browser tetapi jika itu tidak diperlukan maka ada jawaban Anda.
sumber
Ini tidak dimaksudkan untuk digunakan dalam kehidupan nyata, hanya latihan yang menarik. Lihat Mengapa menggunakan fungsi eval JavaScript adalah ide yang buruk? untuk detailnya.
Ini adalah cara terdekat yang bisa Anda dapatkan tanpa menggunakan ekstensi khusus vendor:
Fungsi pembantu:
Bukti bahwa itu berfungsi dalam lingkup yang sewenang-wenang:
eval
tidak didukung di Safari.sumber
Sebagai pembaruan atas jawaban Menteri, Anda sekarang dapat melakukan ini dengan es2015:
https://jsbin.com/fubaluwimo/edit?js,console
sumber
Anda juga dapat memiliki jenis tuple di Javascript. Tentukan saja dengan fungsi tingkat tinggi (istilah akademisnya adalah pengkodean Gereja):
Harap dicatat bahwa
Tuple
tidak digunakan sebagai konstruktor normal. Solusinya tidak bergantung pada sistem prototipe sama sekali, tetapi hanya pada fungsi tingkat tinggi.Apa keuntungan tupel dibandingkan
Array
s digunakan seperti tupel? Tupel yang dikodekan Gereja tidak dapat diubah oleh desain dan dengan demikian mencegah efek samping yang disebabkan oleh mutasi. Ini membantu membangun aplikasi yang lebih kuat. Selain itu, lebih mudah untuk bernalar tentang kode yang membedakan antaraArray
s sebagai jenis kumpulan (misalnya[a]
) dan tupel sebagai data terkait dari berbagai jenis (misalnya(a, b)
).sumber
Berikut adalah implementasi Javascript Tuple sederhana:
Ini adalah 2-tupel, namun, Anda dapat memodifikasi contoh saya untuk mendukung 3,4,5,6 tupel dll.
sumber
tuple
contoh masih bisa berubah, sehingga secara teknis tidak tupel. Untuk bukti perubahantuple.Item1 = "Steve"
makaconsole.log()
outputnya.Berikut adalah versi jawaban Matthew James Davis dengan metode tuple Python yang ditambahkan:
sumber