Untuk loop di dalam map javascript

Metode const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 membuat larik baru yang diisi dengan hasil pemanggilan fungsi yang disediakan pada setiap elemen dalam larik pemanggil

// Arrow function map((element) => { /* … */ }) map((element, index) => { /* … */ }) map((element, index, array) => { /* … */ }) // Callback function map(callbackFn) map(callbackFn, thisArg) // Inline callback function map(function (element) { /* … */ }) map(function (element, index) { /* … */ }) map(function (element, index, array) { /* … */ }) map(function (element, index, array) { /* … */ }, thisArg) _

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _3

Fungsi untuk mengeksekusi setiap elemen dalam array. Nilai pengembaliannya ditambahkan sebagai elemen tunggal dalam larik baru

Fungsi tersebut dipanggil dengan argumen berikut

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _4

Elemen saat ini sedang diproses dalam larik

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 5

Indeks elemen saat ini sedang diproses dalam larik

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _6

Array const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _2 dipanggil

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 8 Opsional

Nilai untuk digunakan sebagai const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _9 saat menjalankan const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3. Lihat

Array baru dengan setiap elemen merupakan hasil dari fungsi callback

Metode const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 adalah sebuah. Itu memanggil fungsi const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3 yang disediakan satu kali untuk setiap elemen dalam array dan membuat array baru dari hasilnya

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3 dipanggil hanya untuk indeks array yang telah menetapkan nilai. Itu tidak dipanggil untuk slot kosong

Metode const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 adalah a. Itu tidak mengubah const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _9. Namun, fungsi yang disediakan sebagai const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _3 dapat mengubah array. Perhatikan, bagaimanapun, bahwa panjang array disimpan sebelum pemanggilan pertama dari const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3. Karena itu

  • const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3 tidak akan mengunjungi elemen apa pun yang ditambahkan melebihi panjang awal array saat panggilan ke const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 dimulai
  • Perubahan pada indeks yang sudah dikunjungi tidak menyebabkan const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3 dipanggil lagi
  • Jika elemen array yang sudah ada dan belum dikunjungi diubah oleh const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3, nilainya diteruskan ke const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 3 akan menjadi nilai pada saat elemen tersebut dikunjungi. Elemen yang dihapus tidak dikunjungi

Peringatan. Modifikasi bersamaan dari jenis yang dijelaskan di atas sering menyebabkan kode yang sulit dipahami dan umumnya harus dihindari (kecuali dalam kasus khusus)

Metode const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 adalah. Itu hanya mengharapkan nilai const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] _9 memiliki properti const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9] 5 dan properti dengan kunci bilangan bulat

Karena const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9] _6 membuat array baru, memanggilnya tanpa menggunakan array yang dikembalikan adalah anti-pola;

Kode berikut mengambil larik angka dan membuat larik baru yang berisi akar kuadrat dari angka dalam larik pertama

const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9]

Kode berikut mengambil larik objek dan membuat larik baru yang berisi objek yang baru diformat ulang

const kvArray = [ { key: 1, value: 10 }, { key: 2, value: 20 }, { key: 3, value: 30 }, ]; const reformattedArray = kvArray.map(({ key, value }) => ({ [key]: value })); console.log(reformattedArray); // [{ 1: 10 }, { 2: 20 }, { 3: 30 }] console.log(kvArray); // [ // { key: 1, value: 10 }, // { key: 2, value: 20 }, // { key: 3, value: 30 } // ]

Kode berikut menunjukkan bagaimana const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9] 6 bekerja ketika sebuah fungsi yang membutuhkan satu argumen digunakan dengannya. Argumen akan secara otomatis ditugaskan dari setiap elemen array sebagai const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9] 6 loop melalui array asli

const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9]

Metode const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2 membaca properti const numbers = [1, 4, 9]; const doubles = numbers.map((num) => num * 2); console.log(doubles); // [2, 8, 18] console.log(numbers); // [1, 4, 9] 5 dari const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 9 dan kemudian mengakses setiap indeks bilangan bulat

const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ]

Contoh ini menunjukkan cara mengulang melalui kumpulan objek yang dikumpulkan oleh const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ] 4. Ini karena const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ] 4 mengembalikan const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ] 6 (yang merupakan kumpulan objek)

Dalam hal ini, kami mengembalikan semua nilai const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ] 7 yang dipilih di layar

const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value);

Cara yang lebih mudah adalah metode const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; console.log(Array.prototype.map.call(arrayLike, (x) => x ** 2)); // [ 4, 9, 16 ] _8

Array renggang tetap renggang setelah const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); // roots is now [1, 2, 3] // numbers is still [1, 4, 9] 2. Indeks slot kosong masih kosong di array yang dikembalikan, dan fungsi panggilan balik tidak akan dipanggil

console.log( [1, , 3].map((x, index) => { console.log(`Visit ${index}`); return x * 2; }), ); // Visit 0 // Visit 2 // [2, empty, 6]

(terinspirasi oleh posting blog ini)

Adalah umum untuk menggunakan panggilan balik dengan satu argumen (elemen yang sedang dilalui). Fungsi tertentu juga biasa digunakan dengan satu argumen, meskipun mereka menggunakan argumen opsional tambahan. Kebiasaan ini dapat menyebabkan perilaku yang membingungkan

Mempertimbangkan

["1", "2", "3"].map(parseInt);

Meskipun orang mungkin mengharapkan const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); _0, hasil sebenarnya adalah const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); 1

const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); _2 sering digunakan dengan satu argumen, tetapi membutuhkan dua argumen. Yang pertama adalah ekspresi dan yang kedua adalah radix ke fungsi callback, const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); 3 meneruskan 3 argumen

  • elemen
  • Indeks
  • array

Argumen ketiga diabaikan oleh const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); 2—tetapi bukan argumen kedua. Ini adalah sumber kemungkinan kebingungan

Berikut adalah contoh singkat dari langkah-langkah iterasi

// parseInt(string, radix) -> map(parseInt(value, index)) /* first iteration (index is 0): */ parseInt("1", 0); // 1 /* second iteration (index is 1): */ parseInt("2", 1); // NaN /* third iteration (index is 2): */ parseInt("3", 2); // NaN

Lalu mari kita bicara tentang solusi

const returnInt = (element) => parseInt(element, 10); ["1", "2", "3"].map(returnInt); // [1, 2, 3] // Actual result is an array of numbers (as expected) // Same as above, but using the concise arrow function syntax ["1", "2", "3"].map((str) => parseInt(str)); // [1, 2, 3] // A simpler way to achieve the above, while avoiding the "gotcha": ["1", "2", "3"].map(Number); // [1, 2, 3] // But unlike parseInt(), Number() will also return a float or (resolved) exponential notation: ["1.1", "2.2e2", "3e300"].map(Number); // [1.1, 220, 3e+300] // For comparison, if we use parseInt() on the array above: ["1.1", "2.2e2", "3e300"].map((str) => parseInt(str)); // [1, 2, 3]

Salah satu keluaran alternatif dari metode peta yang dipanggil dengan const elems = document.querySelectorAll("select option:checked"); const values = Array.prototype.map.call(elems, ({ value }) => value); 2 sebagai parameter berjalan sebagai berikut

Bagaimana cara mengulang peta dalam JavaScript?

Ringkasan .
Untuk mengulangi Peta, kita dapat menggunakan for. konstruksi perulangan of dan forEach()
Peta menyediakan tiga metode yang mengembalikan iterable. peta. kunci(), peta. nilai() dan peta. entri()
Iterasi atas Peta selalu dalam urutan penyisipan

Bisakah Anda menggunakan peta dalam for loop?

Gunakan map() alih-alih loop for() . Jika Anda hanya memiliki pengetahuan tentang for() loop dalam JavaScript, artikel ini akan meminta Anda untuk memahami sintaks Ekspresi Fungsi Panah (a. k. a. fungsi "panah gemuk"). map() function works. If you only have knowledge of for() loops in JavaScript, this article will require you to understand the Arrow Function Expression syntax (a.k.a. “fat arrow” functions).

Bisakah Anda memiliki for loop di dalam suatu fungsi?

Saat kita mencatat ekspresi pemanggilan fungsi, hasilnya adalah nilai kembalian dari fungsi tersebut. Kami mencatat nilai kembalian dari ekspresi fungsi anonim yang memohon sendiri (yang disebutnya sendiri). Ini membuktikan bahwa kita dapat menjalankan fungsi di dalam loop .

Apakah peta lebih cepat daripada untuk loop JavaScript?

Pertama, lihat ini. Anda dapat melihat bahwa for loop 3 kali lebih cepat daripada metode array seperti forEach map and reduce . Setelah menerima elemen array, metode array menjalankan fungsi callback untuk setiap elemen.

Postingan terbaru

LIHAT SEMUA