One place for hosting & domains

      Mencari

      Empat Metode untuk Mencari di Dalam Larik di JavaScript


      Dalam JavasScript, ada banyak cara yang berguna untuk menemukan item di Larik (Array). Anda selalu dapat kembali menggunakan perulangan for dasar, tetapi dengan ES6+, ada banyak metode untuk mengulang data larik dan menemukan apa yang Anda perlukan dengan mudah.

      Dengan begitu banyak metode berbeda, manakah yang Anda gunakan dan dalam kasus apa? Misalnya, saat mencari di dalam larik, apakah Anda ingin tahu jika elemennya ada di dalam larik? Apakah Anda memerlukan indeks dari elemen atau elemennya itu sendiri?

      Dengan setiap metode berbeda yang akan kita bahas, penting untuk memahami bahwa semua itu adalah metode bawaan pada Array.prototype. Itu berarti Anda hanya perlu menambatkannya ke larik apa pun dengan notasi titik. Itu juga berarti metode ini tidak tersedia pada objek atau hal lainnya selain Larik (meskipun ada tumpang tindih dengan String).

      Kita akan membahas metode-metode Larik berikut:

      includes

      const alligator = ["thick scales", 80, "4 foot tail", "rounded snout"];
      
      alligator.includes("thick scales"); // returns true
      

      Metode .includes() menghasilkan nilai boolean dan sempurna untuk memberi tahu Anda jika suatu elemen ada di dalam larik atau tidak. Ini memberikan jawaban true atau false yang sederhana. Ini adalah sintaks dasarnya:

      arr.includes(valueToFind, [fromIndex]);
      

      Kini, seperti yang Anda lihat dalam contoh, kita hanya memiliki satu parameter – valueToFind. Ini adalah nilai untuk dicocokkan dalam larik. fromIndex opsional adalah angka, yang mengindikasikan dari indeks apa Anda ingin untuk memulai pencarian (asali adalah 0, yang berarti keseluruhan larik akan dicari). Jadi, karena dalam contoh kita item ‘thick scales’ berada di indeks 0, yang berikut ini akan menjadi salah: alligator.includes('thick scales', 1); karena pencarian dimulai dari indeks 1 dan seterusnya.

      Sekarang, ada beberapa hal penting yang harus diperhatikan. Metode .includes() ini menggunakan perbandingan yang ketat. Itu berarti, dari contoh di atas, yang berikut ini akan menghasilkan false: alligator.includes('80'); Itu karena meskipun 80 == '80' adalah benar, 80 === '80' adalah salah – jenis berbeda tidak akan berhasil melewati perbandingan yang ketat.

      find

      Bagaimana .find() berbeda dari metode includes()? Jika dalam contoh kita hanya mengubah teks “includes” menjadi “find”, kita akan mendapat pesan kesalahan ini:

      Uncaught TypeError: thick scales is not a function
      

      Itu karena metode pencarian ini membutuhkan fungsi yang harus dimasukkan. Itu karena metode pencarian tidak hanya akan menggunakan operator perbandingan sederhana seperti yang dilakukan “includes()”. Alih-alih, ini akan memasukkan setiap elemen ke dalam fungsi dan melihat apakah itu menghasilkan true atau false. Jadi, meskipun ini berfungsi: alligator.find(() => 'thick scales');, Anda mungkin ingin menempatkan operator perbandingan Anda di dalam fungsi agar mendapatkan hasil yang relevan.

      const alligator = ["thick scales", 80, "4 foot tail", "rounded snout"];
      
      alligator.find(el => el.length < 12); // returns '4 foot tail'
      

      Fungsi sederhana dalam metode pencarian kita ini mencari setiap elemen dari larik, dengan alias dari ‘el’ yang kita berikan, dan berhenti ketika menemukan elemen pertama yang benar. Dalam kasus kita, true (benar) berarti memiliki properti panjang kurang dari 12 (angka tidak memiliki properti panjang). Anda tentu dapat membuat fungsi ini serumit mungkin sesuai keperluan, yang membuat kondisi benar memenuhi kebutuhan Anda.

      Perhatikan juga, ini tidak menghasilkan true. Metode pencarian tidak menghasilkan boolean, tetapi menghasilkan elemen yang cocok pertama. Jika tidak ada elemen yang cocok – yang berarti tidak ada elemen yang memenuhi kriteria yang didefinisikan dalam fungsi – maka hasilnya adalah undefined.. Juga perhatikan bahwa yang dihasilkan adalah elemen yang pertama, jadi jika ada lebih dari satu elemen di dalam larik yang memenuhi kriteria, metode ini hanya akan mengambil instans pertama. Dalam contoh kita, jika ada string lainnya dengan panjang kurang dari 12 setelah ‘4 feet tall’, ini tidak akan mengubah hasil kita.

      Dalam contoh ini, kita hanya menggunakan pemanggilan kembali dengan satu parameter. Anda juga dapat menambahkan parameter untuk merujuk ke indeks elemen saat ini. Parameter lain dapat menjadi keseluruhan larik itu sendiri, tetapi saya menemukan hal ini jarang digunakan. Berikut adalah contoh penggunaan indeks:

      alligator.find((el, idx) => typeof el === "string" && idx === 2); // returns '4 foot tall'
      

      Kita tahu dalam larik kita ada 3 elemen berbeda yang memenuhi kondisi pertama (typeof el === ‘string’). Jika ini adalah satu-satunya kondisi kita, hasil yang muncul adalah yang pertama, ‘thick scales’. Namun, perbedaannya adalah hanya satu yang memiliki indeks 2 dan itu adalah ‘4 foot tall’.

      Berbicara tentang indeks, metode larik yang mirip adalah .findIndex(). Metode ini juga menerima fungsi, tetapi seperti yang Anda duga, metode ini menghasilkan indeks elemen alih-alih elemen itu sendiri.

      indexOf

      const alligator = ["thick scales", 80, "4 foot tail", "rounded snout"];
      
      alligator.indexOf("rounded snout"); // returns 3
      

      Seperti metode .includes(), .indexOf() menggunakan perbandingan ketat, bukan fungsi seperti yang kita lihat pada metode .find(). Namun, tidak seperti includes(), metode ini menghasilkan indeks dari elemen, alih-alih boolean. Anda juga dapat mengindikasikan pencarian akan dimulai di indeks yang berada dalam larik.

      Saya merasa indexOf() sangat berguna. Ini cepat dan mudah, dapat memberi tahu Anda lokasi elemen di dalam larik, dan dapat memberi tahu Anda jika elemen ada di dalam larik. Bagaimana metode ini memberi tahu Anda ketika elemen itu ada? Pada dasarnya, kita dapat mengetahui bahwa elemen ada jika hasil yang diberikan adalah angka positif, dan jika hasilnya adalah -1, kita tahu bahwa elemen itu tidak ada.

      alligator.indexOf("soft and fluffy"); // returns -1
      alligator.indexOf(80); // returns 1
      alligator.indexOf(80, 2); // returns -1
      

      Seperti yang Anda dapat lihat, meskipun kita dapat menemukan metode find() atau findIndex() untuk memberikan informasi yang sama, metode ini memerlukan penulisan yang jauh lebih sedikit. Kita tidak perlu menulis fungsi untuk perbandingan, karena itu sudah ada dalam metode indexOf.

      Sekarang, seperti yang lain, indexOf() juga mengembalikan indeks dari elemen cocok pertama yang ditemukan. JavaScript memberi kita metode larik alternatif .lastIndexOf(). Seperti yang Anda tebak, ini melakukan hal yang sama seperti indexOf() tetapi dimulai dari indeks larik terakhir dan bekerja ke arah belakang. Anda juga dapat menentukan parameter kedua, tetapi ingat bahwa indeks tidak berubah hanya karena Anda menggunakan metode yang berbeda.

      const alligator = ["thick scales", 80, "4 foot tail", "rounded snout", 80];
      
      alligator.indexOf(80); // returns 1
      alligator.lastIndexOf(80); // returns 4
      alligator.indexOf(80, 2); // returns 4
      alligator.lastIndexOf(80, 4); // returns 4
      alligator.lastIndexOf(80, 3); // returns 1
      

      Bonus: filter

      const alligator = ["thick scales", 80, "4 foot tail", "rounded snout", 80];
      
      alligator.filter(el => el === 80); //returns [80, 80]
      

      Metode filter() mirip seperti metode find(), dalam hal mengharuskan fungsi dimasukkan dan kondisi yang dihasilkan. Perbedaan utamanya adalah, filter() selalu menghasilkan suatu larik, bahkan jika hanya ada satu elemen yang cocok. Namun, metode ini akan menghasilkan semua elemen yang cocok, sedangkan find() hanya mengembalikan yang cocok.

      Hal penting tentang filter adalah metode ini menghasilkan semua elemen yang cocok dengan kriteria Anda. Mungkin ini pendapat saya saja, tetapi saya dapat bingung, memikirkan “ini adalah elemen yang saya inginkan untuk filter out”, padahal sebenarnya Anda mengindikasikan elemen yang Anda inginkan untuk filter in.

      Kesimpulan

      Menurut saya, metode termudah untuk digunakan ketika mencari sesuatu adalah metode find(), tetapi seperti yang Anda lihat bahwa ini tergantung kasus Anda.

      • Apakah Anda hanya perlu mengetahui jika elemennya ada? Gunakan .includes().
      • Apakah Anda perlu mendapatkan elemen itu sendiri? Gunakan .find(), atau .filter() untuk beberapa item.
      • Apakah Anda perlu mencari indeks dari elemen? Gunakan .indexof() atau findIndex() untuk pencarian yang lebih kompleks.

      Larik dalam contoh di sini sangatlah sederhana. Anda mungkin menemukan larik dari banyak objek. Berikut adalah beberapa contoh sederhana di bawah ini untuk bernavigasi di hutan dari begitu banyak objek yang disangkarkan:

      const jungle = [
        { name: "frog", threat: 0 },
        { name: "monkey", threat: 5 },
        { name: "gorilla", threat: 8 },
        { name: "lion", threat: 10 }
      ];
      
      // break the object down in order to use .includes() or .indexOf()
      const names = jungle.map(el => el.name); // returns ['frog', 'monkey', 'gorilla', 'lion']
      console.log(names.includes("gorilla")); // returns true
      console.log(names.indexOf("lion")); // returns 3 - which corresponds correctly assuming no sorting was done
      
      // methods we can do on the array of objects
      console.log(jungle.find(el => el.threat == 5)); // returns object - {name: "monkey", threat: 5}
      console.log(jungle.filter(el => el.threat > 5)); // returns array - [{name: "gorilla", threat: 8}, {name: 'lion', threat: 10}]
      



      Source link

      Cara Menggunakan Find dan Locate untuk Mencari Berkas di Linux


      Pengantar

      Satu masalah yang dialami pengguna saat kali pertama berhadapan dengan mesin Linux adalah cara menemukan berkas yang mereka cari.

      Panduan ini akan membahas cara menggunakan perintah aptly bernama find. Ini akan membantu Anda mencari berkas di VPS menggunakan berbagai filter dan parameter. Kita juga akan membahas secara singkat perintah locate, yang dapat digunakan untuk mencari berkas dengan cara lain.

      Cara paling mudah dimengerti untuk mencari berkas adalah menurut namanya.

      Untuk mencari berkas menurut nama, ketikkan:

      Perintah ini peka huruf kapital, yang berarti mencari berkas berbeda dengan mencari Berkas.

      Untuk mencari berkas menurut nama, tetapi mengabaikan huruf kapital kueri, ketikkan:

      Jika Anda ingin menemukan semua berkas yang tidak mematuhi pola tertentu, Anda dapat membalik pencarian dengan -not atau!. Jika menggunakan!, Anda harus meloloskan karakter agar bash tidak mencoba menafsirkannya sebelum find bertindak:

      • find -not -name "query_to_avoid"

      Atau

      • find ! -name "query_to_avoid"

      Anda dapat menentukan tipe berkas yang ingin ditemukan dengan parameter -type. Cara kerjanya seperti ini:

      • find -type type_descriptor query

      Beberapa deskriptor paling umum yang dapat Anda gunakan untuk menentukan tipe berkas adalah:

      • f: berkas reguler

      • d: direktori

      • l: tautan simbolis

      • c: perangkat karakter

      • b: perangkat blok

      Misalnya, jika ingin menemukan semua perangkat karakter di sistem, kita dapat memberikan perintah ini:

      Output

      /dev/parport0 /dev/snd/seq /dev/snd/timer /dev/autofs /dev/cpu/microcode /dev/vcsa7 /dev/vcs7 /dev/vcsa6 /dev/vcs6 /dev/vcsa5 /dev/vcs5 /dev/vcsa4 . . .

      Kita dapat mencari semua berkas yang berakhiran .conf seperti ini:

      • find / -type f -name "*.conf"

      Output

      /var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf /usr/share/base-files/nsswitch.conf /usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf /usr/share/rsyslog/50-default.conf /usr/share/adduser/adduser.conf /usr/share/davfs2/davfs2.conf /usr/share/debconf/debconf.conf /usr/share/doc/apt-utils/examples/apt-ftparchive.conf . . .

      Find memberi Anda beragam cara untuk memfilter hasil menurut ukuran dan waktu.

      Ukuran

      Anda dapat memfilter menurut ukuran dengan parameter -size.

      Kita menambahkan akhiran di belakang nilai yang menentukan cara perhitungan. Inilah beberapa opsi yang populer:

      • c: bita

      • k: Kilobita

      • M: Megabita

      • G: Gigabita

      • b: blok 512-bita

      Untuk menemukan semua berkas yang persis 50 bita, ketikkan:

      Untuk menemukan semua berkas yang kurang dari 50 bita, kita dapat menggunakan bentuk ini sebagai gantinya:

      Untuk menemukan semua berkas yang lebih dari 700 Megabita, kita dapat menggunakan perintah ini:

      Waktu

      Linux menyimpan data waktu tentang waktu akses, waktu modifikasi, dan waktu perubahan.

      • Waktu Akses: Terakhir kali berkas dibaca atau ditulis.

      • Waktu Modifikasi: Terakhir kali isi berkas dimodifikasi.

      • Waktu Perubahan: Terakhir kali metadata inode berkas diubah.

      Kita dapat menggunakannya dengan parameter -atime, -mtime, dan -ctime. Simbol plus dan minus dapat digunakan untuk menentukan lebih dari atau kurang dari, seperti yang kita lakukan dengan ukuran.

      Nilai parameter ini menentukan jumlah hari lampau yang ingin Anda cari.

      Untuk menemukan berkas yang memiliki waktu modifikasi sehari yang lalu, ketikkan:

      Jika kita ingin berkas yang diakses kurang dari sehari yang lalu, kita dapat mengetikkan:

      Untuk mendapatkan berkas dengan informasi meta yang diubah lebih dari 3 hari yang lalu, ketikkan:

      Ada juga beberapa parameter pendamping yang dapat kita gunakan untuk menentukan dalam menit, bukan dalam hari:

      Parameter ini akan memberikan berkas yang telah dimodifikasi di sistem dalam menit terakhir.

      Find juga dapat melakukan perbandingan terhadap berkas referensi dan menampilkan berkas yang lebih baru:

      Anda juga dapat mencari berkas menurut pemilik berkas atau pemilik grup.

      Anda melakukannya masing-masing dengan menggunakan parameter -user dan -group. Temukan berkas yang dimiliki oleh pengguna “syslog” dengan memasukkan:

      Demikian pula, kita dapat menentukan berkas yang dimiliki oleh grup “shadow” dengan mengetikkan:

      Kita juga dapat mencari berkas dengan izin tertentu.

      Jika kita ingin mencocokkan dengan seperangkat izin secara persis, kita gunakan bentuk ini:

      Perintah ini akan mencocokkan secara persis berkas dengan beberapa izin yang ditentukan.

      Jika ingin menentukan sesuatu setidaknya dengan izin itu, Anda dapat menggunakan bentuk ini:

      Bentuk ini akan mencocokkan berkas yang memiliki izin tambahan. Berkas dengan izin “744” akan cocok dengan instans ini.

      Untuk bagian ini, kita akan membuat struktur direktori dalam suatu direktori sementara. Isinya akan berupa tiga tingkat direktori, dengan sepuluh direktori di tingkat pertama.mprovemenimprovement. Setiap direktori (termasuk direktori sementara) akan berisi sepuluh berkas dan sepuluh subdirektori.

      Buatlah struktur ini dengan mengeluarkan perintah berikut:

      • cd
      • mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}
      • touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}
      • cd ~/test

      Silakan periksa struktur direktori dengan ls dan cd untuk mengatur cara mengorganisirnya. Bila Anda selesai, kembalilah ke direktori pengujian:

      Kita akan membahas cara menghasilkan berkas tertentu dari struktur ini. Mari kita coba suatu contoh terlebih dahulu dengan mencari nama reguler untuk perbandingan:

      Output

      ./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 ./level1dir7/level2dir8/level3dir6/file1 ./level1dir7/level2dir8/level3dir5/file1 ./level1dir7/level2dir8/file1 . . .

      Ada banyak hasilnya. Jika kita menyalurkan keluaran ke dalam penghitung, kita dapat melihat bahwa seluruhnya ada 1111 hasil:

      Output

      1111

      Hasil ini mungkin terlalu banyak untuk Anda gunakan dalam keadaan umum. Mari kita coba mempersempitnya.

      Anda dapat menentukan kedalaman maksimum pencarian di direktori pencarian tingkat teratas:

      • find -maxdepth num -name query

      Untuk menemukan direktori “file1” hanya dalam direktori “level1” ke atas, Anda dapat menentukan kedalaman maksimum sebesar 2 (1 untuk direktori tingkat teratas dan 1 untuk direktori level1):

      • find -maxdepth 2 -name file1

      Output

      ./level1dir7/file1 ./level1dir1/file1 ./level1dir3/file1 ./level1dir8/file1 ./level1dir6/file1 ./file1 ./level1dir2/file1 ./level1dir9/file1 ./level1dir4/file1 ./level1dir5/file1 ./level1dir10/file1

      Daftar itu menjadi jauh lebih mudah diatur.

      Anda juga dapat menentukan direktori minimum jika mengetahui bahwa semua berkas yang ada melewati titik tertentu dalam direktori saat ini:

      • find -mindepth num -name query

      Kita dapat menggunakan ini untuk menemukan berkas yang ada di akhir cabang direktori saja:

      • find -mindepth 4 -name file

      Output

      ./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 . . .

      Sekali lagi, karena struktur direktori pencabangan, ini akan mengembalikan hasil yang sangat banyak (1000).

      Anda dapat mengombinasikan parameter kedalaman minimum dan maksimum untuk memfokuskan pada rentang yang sempit:

      • find -mindepth 2 -maxdepth 3 -name file

      Output

      ./level1dir7/level2dir8/file1 ./level1dir7/level2dir5/file1 ./level1dir7/level2dir7/file1 ./level1dir7/level2dir2/file1 ./level1dir7/level2dir10/file1 ./level1dir7/level2dir6/file1 ./level1dir7/level2dir3/file1 ./level1dir7/level2dir4/file1 ./level1dir7/file1 . . .

      Mengeksekusi dan Mengombinasikan Perintah Find

      Anda dapat mengeksekusi perintah pembantu arbiter atas segala sesuatu yang dianggap cocok menggunakan parameter -exec. Parameter itu dipanggil seperti ini:

      • find find_parameters -exec command_and_params {} ;

      {} digunakan sebagai penampung berkas yang dianggap cocok. ; digunakan agar mengetahui akhir perintah.

      Misalnya, kita dapat menemukan berkas di bagian sebelumnya yang memiliki 644 izin dan memodifikasinya agar memiliki 664 izin:

      • cd ~/test
      • find . -type f -perm 644 -exec chmod 664 {} ;

      Kita nanti dapat mengubah izin direktori seperti ini:

      • find . -type d -perm 755 -exec chmod 700 {} ;

      Jika ingin merangkai hasil yang berbeda, Anda dapat menggunakan perintah -and atau -or. -and dianggap ada jika tidak disertakan.

      • find . -name file1 -or -name file9

      Menemukan Berkas Menggunakan Locate

      Alternatif penggunaan find adalah perintah locate. Perintah ini sering kali lebih cepat dan dapat mencari ke seluruh sistem berkas dengan mudah.

      Anda dapat menginstal perintah di Debian atau Ubuntu dengan apt:

      Di CentOS, gunakan dnf sebagai gantinya:

      Alasan locate lebih cepat daripada find adalah karena mengandalkan basis data berkas di sistem berkas.

      Basis data biasanya diperbarui sekali sehari dengan skrip cron, tetapi Anda dapat memperbaruinya secara manual dengan mengetikkan:

      Jalankan perintah ini sekarang. Ingat, basis data harus selalu diperbarui jika Anda ingin menemukan berkas yang baru-baru ini diperoleh atau dibuat.

      Untuk menemukan berkas dengan locate, cukup gunakan sintaks ini:

      Anda dapat memfilter keluaran dalam beberapa cara.

      Misalnya, agar hanya mengembalikan berkas yang berisi kueri itu sendiri, bukan mengembalikan setiap berkas yang memiliki kueri dalam direktori yang mengarah ke sana, Anda dapat menggunakan -b untuk mencari “basename"saja:

      Agar locate hanya mengembalikan hasil yang masih ada di sistem berkas (yang belum dihapus di antara panggilan updatedb dan panggilan locate saat ini), gunakan bendera -e:

      Untuk melihat statistik tentang informasi yang dikatalogkan oleh locate, gunakan opsi -S:

      Output

      Database /var/lib/mlocate/mlocate.db: 3,315 directories 37,228 files 1,504,439 bytes in file names 594,851 bytes used to store database

      Kesimpulan

      Find dan locate adalah cara bagus untuk menemukan berkas di sistem Anda. Anda bebas memilih untuk menentukan alat yang sesuai dengan setiap situasi.

      Find dan locate adalah perintah berguna yang dapat diperkuat dengan mengombinasikannya dengan utilitas lain melalui berbagai saluran. Bereksperimenlah dengan melakukan filter menggunakan perintah seperti wc, sort, dan grep.



      Source link