Rumah > hujung hadapan web > tutorial js > Mengapa Set.has() Lebih Cepat Daripada Array.includes() untuk Mencari Item

Mengapa Set.has() Lebih Cepat Daripada Array.includes() untuk Mencari Item

Susan Sarandon
Lepaskan: 2024-11-06 06:09:03
asal
447 orang telah melayarinya

Why Set.has() is Faster Than Array.includes() for Finding Items

Kadangkala, apabila membina aplikasi, prestasi akhirnya menjadi kunci atau sekurang-kurangnya pemacu penting, terutamanya apabila berurusan dengan set data yang besar atau keperluan masa nyata. Salah satu tugas yang paling biasa dalam JavaScript adalah untuk menyemak sama ada beberapa nilai wujud dalam koleksi. Dua alternatif yang paling kerap digunakan ialah Array.includes() dan Set.has(). Kedua-duanya berfungsi, tetapi sebenarnya, Set.has() berfungsi lebih baik daripada Array.includes. Mari kita selidiki sebab-sebabnya dan tentukan bila anda harus menggunakan salah satu alternatif.

Memahami Array.includes() vs. Set.has()

Terdapat dua kaedah yang kelihatan agak mudah dalam penggunaannya, tetapi mempunyai pelaksanaan yang berbeza, iaitu, Array.includes() dan Set.has().

Array.includes()

Kaedah termasuk() menyemak sama ada nilai yang diberikan hadir dalam tatasusunan.
Ia menggunakan kerumitan masa O(n), supaya semakin besar panjang tatasusunan, semakin lama masa yang diperlukan untuk semakan nilai.
Ini kerana Array.includes() mencari tatasusunan dari mula hingga akhir (atau sehingga ia menjumpai nilai), dan lebih besar tatasusunan, lebih lama masa yang diperlukan.

Set.has()

Kaedah has() bagi Set menyemak sama ada nilai yang diberikan juga wujud tetapi melakukannya dengan lebih pantas.
Set.has() bergantung pada struktur berasaskan jadual cincang yang membenarkan carian masa tetap atau kerumitan masa O(1).
Tidak seperti tatasusunan, set dibina untuk mengendalikan nilai unik, jadi ia tidak akan mempunyai nilai pendua di dalamnya dan mempunyai lebih banyak masa carian.

Mengapa Set.has() Lebih Cepat untuk Set Data Besar

Apabila anda menggunakan Set.has(), JavaScript boleh mencari item dalam satu operasi langsung, tidak kira berapa banyak item dalam set. Sebagai contoh, semasa menyemak sama ada nilai berada dalam set yang mengandungi sejuta, masa yang digunakan oleh Set.has() akan sama dengan menyemak sepuluh.

Sebaliknya, Array.includes() meneliti setiap elemen dari kiri ke kanan secara berurutan sehingga ia mungkin sama ada mencari item yang diminati atau mencapai penghujungnya. Ini bermakna semakin lama saiznya, masa semak mengambil masa, terutamanya dalam kes item yang hampir dengan penghujung-dan pasti apabila item yang dimaksudkan tidak ada.

Berikut adalah contoh yang dekat:

const bigArray = Array.from({ length: 1000000 }, (_, i) => i);
const bigSet = new Set(bigArray);

const valueToFind = 999999;

// Array.includes (O(n)) - Slower for large arrays
console.time("Array.includes");
bigArray.includes(valueToFind);
console.timeEnd("Array.includes");

// Set.has (O(1)) - Faster for large sets
console.time("Set.has");
bigSet.has(valueToFind);
console.timeEnd("Set.has");
Salin selepas log masuk
Salin selepas log masuk

Apabila anda menjalankan ini, anda melihat Set.has() jauh mengatasi Array.includes() pada tatasusunan besar. Dalam praktiknya, perbezaan itu mungkin diterjemahkan kepada animasi yang lebih lancar, masa pemuatan yang lebih pantas atau lebih sedikit penggunaan sumber pada pelayan anda.

Bila hendak menggunakan Set.has() dan Array.includes()

Ini semua bergantung pada apa yang anda cuba capai. Berikut ialah ringkasan ringkas:

Gunakan Set.has() jika:

  • Anda sedang berurusan dengan data besar dan melakukan banyak carian.
  • Anda bekerja dengan nilai unik, seperti set ID pengguna unik, teg atau kata kunci.
  • Anda tidak kisah dengan kos pendahuluan yang kecil bagi penukaran tatasusunan kepada
  • tetapkan untuk meminimumkan bilangan carian kemudian.

Gunakan Array.includes() jika:

  • Set data anda kecil dan perbezaan prestasi boleh diabaikan.
  • Anda perlu menyemak item sekali atau beberapa kali sahaja, jadi tiada faedah untuk mencipta Set.
  • Anda sedang berhadapan dengan pendua, yang tidak dapat dikendalikan oleh satu set.

Contoh Use Case

Bayangkan anda sedang melaksanakan ciri carian pengguna yang menapis nama terhadap senarai perkataan yang disekat. Jika anda mempunyai ratusan perkataan yang disekat dan sedang mencari dengan kerap, menggunakan Set untuk perkataan yang disekat boleh menjadikan setiap pemeriksaan carian lebih pantas:

const bigArray = Array.from({ length: 1000000 }, (_, i) => i);
const bigSet = new Set(bigArray);

const valueToFind = 999999;

// Array.includes (O(n)) - Slower for large arrays
console.time("Array.includes");
bigArray.includes(valueToFind);
console.timeEnd("Array.includes");

// Set.has (O(1)) - Faster for large sets
console.time("Set.has");
bigSet.has(valueToFind);
console.timeEnd("Set.has");
Salin selepas log masuk
Salin selepas log masuk

Walaupun dalam kes yang lebih kecil, Set akan membantu memastikan perkara itu cekap dan boleh diramal. Selain itu, jika senarai perkataan yang disekat bertambah, anda sudah pun mempunyai penyelesaian berskala.

Pengambilan Utama

  • Prestasi: Set.has() menawarkan kerumitan masa O(1), menjadikannya lebih pantas daripada Array.includes() dengan O(n) untuk koleksi yang lebih besar

  • Kesesuaian: Set direka bentuk untuk nilai unik, jadi ia dioptimumkan secara semula jadi untuk carian. Tatasusunan lebih fleksibel dengan nilai pendua tetapi lebih perlahan dalam menyemak kewujudan.

  • Skalabiliti: Apabila data anda berkembang, Set.has() terus menunjukkan prestasi yang baik, manakala Array.includes() akan menjadi perlahan.

Fikiran Akhir

Adalah penting untuk mengetahui saiz dan sifat set data anda apabila memilih antara Set.has() dan Array.includes(). Array.includes() adalah baik untuk set data kecil, tetapi Set.has() ialah alat yang berharga dalam situasi di mana kelajuan adalah kritikal. Struktur data yang betul boleh membantu mengoptimumkan aplikasi JavaScript anda untuk menjadi lebih pantas dan cekap tanpa membuat perubahan besar pada kod anda.

Oleh itu, apabila anda mendapati diri anda menyemak sama ada ada sesuatu, maka anda harus bertanya kepada diri sendiri: Adakah itu kerja untuk tatasusunan, atau adakah saya boleh menggunakan kuasa set? Memperbetulkannya mungkin perbezaan yang diperlukan oleh aplikasi anda.

Atas ialah kandungan terperinci Mengapa Set.has() Lebih Cepat Daripada Array.includes() untuk Mencari Item. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan