Saya tahu ada banyak topik seperti ini. Dan saya tahu dasar-dasarnya: .forEach()
beroperasi pada array asli dan .map()
yang baru.
Dalam kasus saya:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
Dan inilah keluarannya:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
Saya tidak mengerti mengapa menggunakan practice
perubahan nilai b
menjadi undefined
.
Maaf jika ini adalah pertanyaan konyol, tetapi saya cukup baru dalam bahasa ini dan jawaban yang saya temukan sejauh ini tidak memuaskan saya.
javascript
arrays
loops
foreach
DzikiChrzan
sumber
sumber
.map
mengembalikan array baru , sedangkan.forEach
tidak mengembalikan apa pun . Pada dasarnya, jika Anda ingin mendapatkan bentuk modifikasi dari larik sebelumnya, Anda menggunakan.map
, jika Anda tidak menginginkannya, Anda menggunakan.forEach
.Jawaban:
Mereka tidak satu dan sama. Izinkan saya menjelaskan perbedaannya.
forEach
: Ini mengulangi daftar dan menerapkan beberapa operasi dengan efek samping untuk setiap anggota daftar (contoh: menyimpan setiap item daftar ke database)map
: Ini mengulangi daftar, mengubah setiap anggota daftar itu, dan mengembalikan daftar lain dengan ukuran yang sama dengan anggota yang diubah (contoh: mengubah daftar string menjadi huruf besar)Referensi
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
sumber
Array.forEach
"Menjalankan fungsi yang disediakan sekali per elemen array."Array.map
"Membuat array baru dengan hasil memanggil fungsi yang disediakan pada setiap elemen dalam array ini."Jadi,
forEach
sebenarnya tidak mengembalikan apa pun. Itu hanya memanggil fungsi untuk setiap elemen array dan kemudian selesai. Jadi, apa pun yang Anda kembalikan dalam fungsi yang dipanggil itu akan dibuang begitu saja.Di sisi lain,
map
akan sama memanggil fungsi untuk setiap elemen array tetapi alih-alih membuang nilai kembaliannya, ia akan menangkapnya dan membangun larik baru dari nilai-nilai yang dikembalikan tersebut.Ini juga berarti bahwa Anda dapat menggunakan di
map
mana pun Anda menggunakanforEach
tetapi Anda tetap tidak boleh melakukannya sehingga Anda tidak mengumpulkan nilai pengembalian tanpa tujuan apa pun. Akan lebih efisien jika Anda tidak mengumpulkannya jika Anda tidak membutuhkannya.sumber
forEach
akan "lebih efisien" daripadamap
terutama jika polyfill diperlukan untuk mendukungforEach
pada browser yang lebih lama (IE8 atau 9). Anda tidak perlu menetapkan pengembalianmap
untuk apa pun; nilai kembali harus mendapatkan sampah yang dikumpulkan segera setelahmap
pengembalian ketika pengembalianmap
tidak ditetapkan.forEach
secara konseptual akan tetap lebih efisien dan lebih cocok untuk tugas-tugas di mana Anda tidak perlu mengumpulkan hasil. Dan saya tidak tahu tentang Anda tetapi pada tahun 2015, saya tidak lagi mengembangkan untuk IE8 (yang juga tidak mendukungmap
); dan dukungan IE9 +forEach
. Dan sebenarnya sebulan setelah jawaban saya, Microsoft mengakhiri dukungan untuk browser tersebut.map
danforEach
panggilan hanya akan kembali setelah seluruh array telah di-loop dan callback telah dipanggil untuk masing-masing.sumber
Perbedaan utama yang perlu Anda ketahui adalah
.map()
mengembalikan array baru sementara.forEach()
tidak. Itulah mengapa Anda melihat perbedaan dalam output..forEach()
hanya beroperasi pada setiap nilai dalam array.Baca:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNAnda mungkin juga ingin memeriksa: -
Array.prototype.every()
- JavaScript | MDNsumber
forEach: Jika Anda ingin melakukan tindakan pada elemen Array dan itu sama seperti yang Anda gunakan untuk perulangan. Hasil dari metode ini tidak memberi kita output beli hanya melalui elemen.
map: Jika Anda ingin melakukan tindakan pada elemen array dan juga ingin menyimpan output dari tindakan Anda ke dalam Array. Ini mirip dengan for loop dalam fungsi yang mengembalikan hasil setelah setiap iterasi.
Semoga ini membantu.
sumber
Perbedaannya terletak pada apa yang mereka kembalikan. Setelah eksekusi:
mengembalikan larik elemen yang dihasilkan dari fungsi yang diproses; sementara:
mengembalikan tidak ditentukan.
sumber
Analisis Kinerja Untuk loop bekerja lebih cepat daripada peta atau foreach karena jumlah elemen dalam array meningkat.
sumber
map: 1642ms forEach: 885ms for: 748ms
Perbedaan antara Foreach & map:
Map () : Jika Anda menggunakan map maka map dapat mengembalikan larik baru dengan mengiterasi larik utama.
Foreach () : Jika Anda menggunakan Foreach maka itu tidak dapat mengembalikan apa pun untuk setiap array utama can iterating.
useFul link : gunakan link ini untuk memahami perbedaan
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
sumber
Satu hal yang perlu diperhatikan adalah bahwa foreach melompati nilai yang tidak diinisialisasi sementara map tidak.
sumber
forEach () hanya mengulang melalui elemen. Itu membuang nilai yang dikembalikan dan selalu mengembalikan yang tidak ditentukan. Hasil dari metode ini tidak memberi kita keluaran.
map () loop melalui elemen mengalokasikan memori dan menyimpan nilai yang dikembalikan dengan iterasi array utama
Contoh:
sumber
Map secara implisit mengembalikan sedangkan forEach tidak.
Inilah sebabnya mengapa saat Anda membuat kode aplikasi JSX, Anda hampir selalu menggunakan peta daripada forEach untuk menampilkan konten di React .
sumber
forEach () :
nilai kembali: tidak ditentukan
originalArray: diubah setelah pemanggilan metode
peta () :
nilai kembali: Array baru yang diisi dengan hasil pemanggilan fungsi yang disediakan pada setiap elemen dalam larik pemanggil
originalArray: tidak diubah setelah pemanggilan metode
sumber