Fungsi panggilan balik di Array.map
memiliki tiga parameter:
Dari halaman Mozilla yang sama dengan yang Anda tautkan:
callback dipanggil dengan tiga argumen: nilai elemen, indeks elemen, dan objek Array yang dilalui. "
Jadi jika Anda memanggil fungsi parseInt
yang sebenarnya mengharapkan dua argumen, argumen kedua akan menjadi indeks elemen.
Dalam hal ini, Anda akhirnya memanggil parseInt
dengan radix 0, 1 dan 2 secara bergantian. Yang pertama sama dengan tidak memasok parameter, sehingga default berdasarkan input (basis 10, dalam hal ini). Basis 1 adalah basis angka yang tidak mungkin, dan 3 bukan angka yang valid di basis 2:
parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2
Jadi dalam hal ini, Anda memerlukan fungsi wrapper:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
atau dengan sintaks ES2015 +:
['1','2','3'].map(num => parseInt(num, 10));
(Dalam kedua kasus, yang terbaik adalah secara eksplisit memasok radix parseInt
seperti yang ditunjukkan, karena jika tidak menebak radix berdasarkan input. Pada beberapa browser yang lebih lama, 0 yang memimpin menyebabkannya menebak oktal, yang cenderung bermasalah. Itu masih akan bermasalah. tebak hex jika string dimulai dengan 0x
.)
.map(parseFloat)
karena hanya menggunakan satu parameter.