Saya ingin memanggil fungsi menggunakan array sebagai parameter:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it
function call_me (param0, param1, param2 ) {
// ...
}
Apakah ada cara yang lebih baik lewat isi x
dalam call_me()
?
javascript
arrays
function
call
Robert
sumber
sumber
Mengapa Anda tidak melewatkan seluruh array dan memprosesnya sesuai kebutuhan di dalam fungsi?
sumber
call_me
fungsi. Itu hanya tidak memiliki titik koma di akhir.Dengan anggapan bahwa call_me adalah fungsi global, jadi Anda tidak berharap ini disetel.
sumber
Dalam standar ES6 ada operator spread baru
...
yang melakukan hal itu.Ini didukung oleh semua browser utama kecuali untuk IE.
Operator penyebaran dapat melakukan banyak hal berguna lainnya, dan dokumentasi yang ditautkan melakukan pekerjaan yang sangat baik untuk menunjukkan hal itu.
sumber
Seperti @KaptajnKold telah menjawab
Dan Anda tidak perlu mendefinisikan setiap parameter untuk fungsi call_me juga. Anda bisa menggunakannya
arguments
sumber
Catat ini
// ---------------------------
halaman html
dapat memanggil fungsi dengan Args apa saja
atau
sumber
Argumen fungsi juga bisa menjadi Array:
tentu saja orang juga dapat menggunakan spread :
sumber
Saat menggunakan operator spread kita harus mencatat bahwa itu harus menjadi parameter terakhir atau satu-satunya yang dilewati. Jika tidak maka akan gagal.
Jika Anda perlu meneruskan array sebagai argumen awal yang dapat Anda lakukan:
sumber
Anda dapat menggunakan operator spread dalam bentuk yang lebih mendasar
dalam hal fungsi yang mengembalikan array tetapi diharapkan untuk lulus sebagai argumen
Contoh:
sumber
Jawabannya sudah diberikan, tetapi saya hanya ingin memberikan sepotong kue. Apa yang ingin Anda capai disebut
method borrowing
dalam konteks JS, bahwa ketika kita mengambil metode dari suatu objek dan menyebutnya dalam konteks objek lain. Sangat umum untuk mengambil metode array dan menerapkannya pada argumen. Biarkan saya memberi Anda sebuah contoh.Jadi kita memiliki fungsi hashing "super" yang mengambil dua angka sebagai argumen dan mengembalikan string hash "super safe":
Sejauh ini bagus, tapi kami punya sedikit masalah dengan pendekatan di atas, dibatasi, hanya bekerja dengan dua angka, yang tidak dinamis, mari kita membuatnya bekerja dengan angka apa pun dan ditambah Anda tidak harus melewati array (Anda bisa jika Anda masih bersikeras). Ok, cukup bicara, ayo bertarung!
Solusi alami adalah dengan menggunakan
arr.join
metode:Oh man. Sayangnya, itu tidak akan berhasil. Karena kita memanggil hash (argumen) dan objek argumen adalah iterable dan seperti array, tetapi bukan array nyata. Bagaimana dengan pendekatan di bawah ini?
Triknya disebut
method borrowing.
Kami meminjam
join
metode dari array reguler[].join.
dan menggunakannya[].join.call
untuk menjalankannya dalam konteksarguments
.Mengapa ini berhasil?
Itu karena algoritma internal metode asli
arr.join(glue)
sangat sederhana.Diambil dari spesifikasi hampir “apa adanya”:
Jadi, secara teknis dibutuhkan ini dan bergabung dengan ini [0], ini [1] ... dll bersama. Ini sengaja ditulis dengan cara yang memungkinkan array seperti ini (bukan kebetulan, banyak metode mengikuti praktik ini). Itu sebabnya ini juga bekerja dengan baik
this=arguments.
sumber