Lebih
Memeriksa apakah suatu elemen ada dalam array
Fungsi yang saya gunakan sekarang untuk memeriksa ini adalah sebagai berikut:
function inArray(needle,haystack)
{
var count=haystack.length;
for(var i=0;i<count;i++)
{
if(haystack[i]===needle){return true;}
}
return false;
}
Ia bekerja. Apa yang saya'm cari adalah apakah ada cara yang lebih baik untuk melakukan hal ini.
504
10
ECMAScript 2016 menggabungkan
termasuk()
metode untuk array yang secara khusus memecahkan masalah, dan sekarang adalah metode yang disukai.JULI 2018, ini belum diimplementasikan di hampir semua utama browser, jika anda perlu untuk mendukung YAITU polyfill yang tersedia.
Edit: Perhatikan bahwa ini mengembalikan false jika item dalam array adalah objek. Hal ini karena benda-benda serupa adalah dua objek yang berbeda dalam JavaScript.
Kode:
Pelaksanaan:
Update (2017):
Di browser modern yang mengikuti ECMAScript 2016 (ES7) standar, anda dapat menggunakan fungsi Array.prototype.includes, yang membuatnya lebih mudah untuk memeriksa apakah item tersebut ada dalam array:
Hanya menggunakan
indexOf
:Jika anda ingin dukungan tua Penjelajah Internet (< IE9), anda'll harus ini seperti anda saat ini kode sebagai solusi meskipun.
Kecuali anda daftar yang diurutkan, anda perlu membandingkan setiap nilai pada jarum. Oleh karena itu, kedua solusi dan
indexOf
akan memiliki untuk melaksanakann/2
perbandingan rata-rata. Namun, sejakindexOf
adalah metode built-in, mungkin menggunakan optimasi tambahan dan akan sedikit lebih cepat dalam praktek. Catatan: jika aplikasi pencarian di daftar sangat sering (katakanlah 1000 kali per detik) atau daftar yang besar (katakanlah 100k entri), perbedaan kecepatan tidak akan peduli.Saya mengacu kepada beberapa kali di Google Chrome 52, tetapi merasa bebas untuk copypaste ke browser lain's konsol.
~ 1500 ms, meliputi (~ 2700 ms ketika saya menggunakan polyfill)
~ 1050 ms, indexOf
~ 650 ms, fungsi kustom
Satu baris kode.. akan mengembalikan nilai true atau false
Anda dapat menggunakan
indexOf
Tetapi tidak bekerja dengan baik di versi terakhir internet explorer. Kode:Pelaksanaan:
Saya sarankan anda menggunakan kode berikut:
Anda dapat menggunakan _contains fungsi dari underscore.js perpustakaan untuk mencapai hal ini:
Sejak ECMAScript6, satu dapat menggunakan Set :
Tergantung pada ukuran jarum yang anda'kembali mencari
Array.filter
mungkin berguna. Berikut ini's contoh:Di lodash anda dapat menggunakan _.termasuk (yang juga alias _.berisi)
Anda dapat mencari seluruh array:
Anda dapat mencari array dari awal indeks:
Cari string:
Juga bekerja untuk memeriksa array sederhana dari benda-benda:
Satu hal yang perlu diperhatikan tentang kasus terakhir adalah bekerja untuk primitif seperti string, angka, dan boolean tapi tidak dapat mencari melalui array atau objek