Contents
Kata kunci JavaScript every dan some memungkinkan Anda untuk memeriksa apakah sebuah pernyataan berlaku untuk semua atau sebagian dari komponen array.
Saya akan mendemonstrasikan cara menggunakan metode array praktis ini di artikel ini.
Bagaimana every() dan some() Bekerja
Pertama kita membutuhkan beberapa data untuk diuji. Untuk kesederhanaan mari kita pertimbangkan array angka:
const nums = [34, 2, 48, 91, 12, 32];
Katakanlah kita sekarang ingin menentukan apakah setiap bilangan bulat dalam array lebih kecil dari 100. Kita dapat dengan cepat mengujinya menggunakan setiap seperti yang ditunjukkan di bawah ini:
nums.every(n => n < 100); // true
ringkas dan manis! Anda dapat mempertimbangkan apa yang terjadi dalam contoh ini sebagai berikut:
Setiap siklus melalui setiap elemen dalam array dari kiri ke kanan.
Itu memanggil fungsi yang ditentukan dengan elemen array saat ini sebagai parameter pertama setelah setiap iterasi.
Sampai fungsi menghasilkan nilai yang salah, perulangan terus berjalan. Setiap kembali salah dalam situasi; jika tidak, itu mengembalikan benar.
Beberapa fungsi juga sangat mirip dengan setiap:
Beberapa ulangi elemen array dari kiri ke kanan.
Itu memanggil fungsi yang ditentukan dengan elemen array saat ini sebagai parameter pertama setelah setiap iterasi.
Siklus berulang sampai fungsi memberikan nilai sebenarnya. Ketika itu terjadi, beberapa menanggapi dengan benar; jika tidak, ia merespons dengan salah.
Sekarang mari kita periksa beberapa untuk melihat apakah ada angka ganjil dalam array:
nums.some(n => n % 2 == 1); // true
Parameter every dan some
Tidak ada perbedaan antara menggunakan metode array every dan some. Mereka berbagi kumpulan parameter yang sama, yang juga memiliki arti yang sama. Jadi, mempelajari semuanya sekaligus cukup sederhana.
Parameter pertama dari metode ini, sebuah fungsi, telah kita gunakan. Fungsi ini dikenal sebagai predikat.
Predikat adalah fungsi kumpulan argumen dalam ilmu komputer yang memberikan hasil boolean. Fungsi yang kami berikan ke setiap/beberapa diperlakukan sebagai predikat oleh JavaScript. Ini umum untuk menyebut fungsi ini sebagai predikat karena dapat mengembalikan segala jenis nilai, tetapi nilai tersebut selalu diperlakukan sebagai Boolean.
Untuk mengontrol ini di dalam predikat non-panah, mereka juga mengandung parameter opsional kedua. Ini dikenal sebagai Arg ini.
Untuk memanggil metode ini, lakukan sebagai berikut:
arr.every(predicate) arr.every(predicate, thisArg) arr.some(predicate) arr.some(predicate, thisArg)
Mari kita lihat predikat dan opsional thisArg secara detail di bawah ini.
Predicate
Every/some memberi kita akses ke elemen array saat ini melalui predikat serta indeksnya dan array asli melalui parameternya, seperti yang ditunjukkan di bawah ini:
Elemen array saat ini adalah parameter pertama.
Indeks elemen saat ini adalah parameter kedua.
Larik itu sendiri, di mana setiap/beberapa dipanggil, adalah parameter ketiga.
Hanya parameter pertama yang digunakan dalam contoh sebelumnya. Mari tentukan dua parameter lagi untuk menangkap indeks dan larik. Kali ini, misalkan kita memiliki data tentang T-Shirt sehingga kita dapat menentukan apakah semuanya berlogo freeCodeCampe:
let tshirts = [ { size: "S", color: "black", logo: "freeCodeCamp" }, { size: "S", color: "white", logo: "freeCodeCamp" }, { size: "S", color: "teal", logo: "freeCodeCamp" }, { size: "M", color: "black", logo: "freeCodeCamp" }, { size: "M", color: "white", logo: "freeCodeCamp" }, { size: "M", color: "teal", logo: "freeCodeCamp" }, { size: "L", color: "black", logo: "freeCodeCamp" }, { size: "L", color: "white", logo: "freeCodeCamp" }, { size: "L", color: "teal", logo: "freeCodeCamp" }, ]; tshirts.every((item, i, arr) => { console.log(i); console.log(arr); return item.logo == "freeCodeCamp"; })
Coba ini di konsol Anda untuk melihat hasilnya. Dan jangan lupa untuk bermain-main dengan beberapa juga.
Optional thisArg
Jika Anda memerlukan nilai this tertentu dalam predikat Anda, Anda dapat menyetelnya menggunakan thisArg. Anda harus menyadari bahwa hanya berlaku untuk predikat non-panah karena fungsi panah tidak memiliki ikatan ini.
Ini di dalam predikat (fungsi non-panah) beroperasi seperti yang diharapkan jika argumen ini ditinggalkan, yaitu:
Ini adalah undef dalam mode ketat.
Ini adalah objek global dalam mode ceroboh, yang merupakan jendela di browser dan global di Node.js.
Saya tidak dapat menemukan penggunaan yang efektif untuk thisArg. Namun, saya yakin keberadaannya menguntungkan karena memberi Anda kendali atas hal ini dalam predikat Anda. Oleh karena itu, meskipun suatu kebutuhan muncul di masa mendatang, Anda akan menyadari bahwa ada solusi.
Kasus untuk every dan some
Apa yang terjadi ketika every dan some dipanggil pada array kosong?
Larik yang ingin Anda uji terkadang kosong. Misalnya, jika Anda mengambil larik dari API, kadang-kadang ada nol atau jumlah entri lainnya.
Nilai pengembalian yang sebenarnya dapat menandakan satu dari dua hal dalam contoh setiap:
Semua elemen array harus memenuhi kriteria jika array berisi lebih dari nol elemen.
Tidak ada item dalam larik.
Jadi, di dalam predikat, kita mungkin melakukan hal-hal gila seperti berikut:
const myCatsBankAccounts = []; myCatsBankAccounts.every(account => account.balance > elonMusk.totalWealth)
Namun demikian, nilai pengembaliannya masih benar!
JavaScript mengembalikan true tanpa melakukan panggilan apa pun ke predikat jika array kosong.
Itu karena, menurut logika, apa pun yang Anda katakan tentang komponen himpunan kosong diterima sebagai benar—atau, lebih akuratnya, benar secara hampa. Meskipun penalaran seperti itu mungkin tampak tidak masuk akal dalam situasi sehari-hari, itu adalah cara kerja logika. Untuk mempelajarinya lebih lanjut, baca artikel wiki yang ditautkan di atas.
Oleh karena itu, jika nilai kembalian dari setiap benar, Anda harus berhati-hati bahwa array bisa kosong.
Di sisi lain, beberapa metode mengembalikan false pada array kosong tanpa memanggil predikat atau melakukan sesuatu yang aneh.
Unsur yang tidak ada diabaikan
Jika array Anda memiliki lubang seperti di bawah ini, mereka akan diabaikan oleh every/some:
const myUntiddyArry = [1,,,3,,42];
Mutasi array di predikat
Saya tidak akan merinci tentang kasus ini karena, dalam banyak situasi, mengubah array asli hanya membuat segalanya lebih sulit dan meninggalkan potensi bug baru.
Silakan baca komentar di spesifikasi untuk informasi jika Anda benar-benar harus atau tertarik.
0 Komentar