Saya ingin membandingkan setiap string dalam Array dengan string yang diberikan. Implementasi saya saat ini adalah:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Fungsi sederhana ini berfungsi, tetapi hanya karena saat ini wordToCompare disetel sebagai variabel global, tetapi tentu saja saya ingin menghindari ini dan meneruskannya sebagai parameter. Masalah saya adalah bahwa saya tidak yakin bagaimana mendefinisikan beginWith () sehingga menerima satu parameter tambahan, karena saya tidak benar-benar memahami bagaimana parameter default yang diperlukan diteruskan. Saya telah mencoba semua cara berbeda yang dapat saya pikirkan dan tidak ada yang berhasil.
Jika Anda juga dapat menjelaskan bagaimana parameter yang diteruskan ke fungsi panggilan balik 'built in' (maaf, saya tidak tahu istilah yang lebih baik untuk ini) akan bekerja dengan baik
sumber
Parameter kedua dari filter akan mengatur ini di dalam callback.
Jadi Anda bisa melakukan sesuatu seperti:
sumber
{one: 'haha', two:'hoho'}
Bagi mereka yang mencari alternatif ES6 menggunakan fungsi panah, Anda dapat melakukan hal berikut.
Versi yang diperbarui menggunakan termasuk :
sumber
sumber
Anda dapat menggunakan fungsi panah di dalam filter, seperti ini:
Fungsi panah di MDN
sumber
Bagi siapa pun yang bertanya-tanya mengapa fungsi panah lemak mereka diabaikan
[, thisArg]
, misalnya mengapa["DOG", "CAT", "DOG"].filter(animal => animal === this, "DOG")
kembali[]
itu karena
this
di dalam fungsi panah tersebut terikat ketika fungsi dibuat dan disetel ke nilaithis
dalam cakupan yang lebih luas, sehinggathisArg
argumennya diabaikan. Saya menyiasatinya dengan cukup mudah dengan mendeklarasikan variabel baru dalam lingkup induk:let bestPet = "DOG"; ["DOG", "CAT", "DOG"].filter(animal => animal === bestPet); => ["DOG", "DOG"]
Berikut ini tautan ke beberapa bacaan lainnya: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this
sumber
berdasarkan jawaban oddRaven dan https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
saya melakukannya dengan 2 cara berbeda. 1) menggunakan cara fungsi. 2) menggunakan cara inline.
sumber
Ada cara mudah untuk menggunakan fungsi filter, mengakses semua parameter, dan tidak memperumitnya.
Kecuali callback thisArg disetel ke filter cakupan lain tidak membuat cakupannya sendiri, dan kita dapat mengakses params dalam cakupan saat ini. Kita dapat mengatur 'ini' untuk menentukan cakupan yang berbeda untuk mengakses nilai lain jika diperlukan, tetapi secara default diatur ke ruang lingkup asalnya. Anda dapat melihat ini digunakan untuk cakupan Angular di tumpukan ini .
Menggunakan indexOf mengalahkan tujuan filter, dan menambahkan lebih banyak overhead. Filter sudah melewati array, jadi mengapa kita perlu mengulanginya lagi? Sebagai gantinya, kita bisa menjadikannya fungsi murni sederhana .
Berikut adalah skenario use-case dalam metode kelas React dimana state memiliki array yang disebut items , dan dengan menggunakan filter kita dapat memeriksa state yang ada:
sumber