Menggunakan Konsol Chrome, ini masukan dan keluaran saya:
[0].map(Array);
[[0, 0, [0]]]; // output
Apa yang terjadi disini?
EDIT
Alasan ini membuatku penasaran adalah karena sesuatu seperti
[0].map(String);
Akan kembali
["0"];
Dan tidak
["0", "0", "String"]
javascript
Jacksonkr
sumber
sumber
['10', '10', '10'].map(parseInt)
.map()
Perilaku aneh lainnya : stackoverflow.com/questions/14528397/… Secara umum, Anda harus berhati-hati saat menggunakan.map()
fungsi yang membutuhkan lebih dari satu argumen.[0].map(console.log)
Jawaban:
The
.map()
Fungsi adalah memanggilArray()
fungsi dengan tiga argumen, nilai dari elemen array yang0
, indeks elemen yang, juga0
, dan referensi ke seluruh array.Jadi seperti melakukan ini:
Larik yang dikembalikan
Array()
saat itu menjadi elemen pertama dari larik yang dibuat.map()
, oleh karena itu merupakan tingkat tambahan bersarang dalam[[0, 0, [0]]]
hasil Anda .EDIT tentang pengeditan Anda: ketika Anda mengatakan
[0].map(String);
bahwa hasilString()
dipanggil dengan tiga argumen yang sama sepertiString(a[index], index, a)
, tetapiString()
fungsi mengabaikan semua kecuali argumen pertama, sedangkanArray()
menggunakan semua argumen yang disediakan.sumber
Pertama ,
Array
bisa digunakan sebagai fungsi untuk membuat array:Kedua ,
map
meneruskan tiga parameter ke callback-nya: elemen, indeksnya dari larik dan larik itu sendiri.Jadi , karena array Anda berisi satu elemen, baris:
setara dengan:
sumber
Setelah Anda memperbarui pertanyaan. Jawaban lain memberi Anda info tentang peta
Untuk menjawab mengapa array dan string berbeda, lihat konstruktor
Konstruktor string menerima 1 parameter String (benda) sedangkan array baru Array (element0, element1 [, ... [, elementN]])
sumber
.map(Number)
mengubah setiap item menjadi angka daripada mengembalikan sesuatu seperti[3, 2, [4, 1, 3]]
untuk setiap item.Panggilan ini
memberi Anda hasil yang sama seperti jika Anda menulis sesuatu seperti ini:
Fungsi peta memanggil fungsi Array dengan tiga parameter: nilai elemen, indeks elemen dan seluruh array. Panggilan ini untuk
Array
mengembalikan Anda array dengan 3 elemen: nilai (angka0
), indeks (angka0
), seluruh array ([0]
).Dan array baru ini dibungkus dalam Array asli, karena Anda memetakan elemen asli (angka
0
) ke elemen baru (array 3 elemen)Catatan: Anda mungkin terbiasa menggunakan hanya parameter pertama seperti di
atau menggunakan hanya dua untuk mendapatkan indeks juga
Namun perlu Anda ingat bahwa
map
masih menyediakan 3 parameter yang Anda abaikan saja di fungsi callback Anda. Itu juga alasan mengapa kode seperti:kembali
Itu karena fungsi String hanya peduli tentang parameter pertama dan mengabaikan parameter lain yang diteruskan. Jika Anda menelepon
kamu masih akan mendapatkan
sumber