Apakah ada cara dalam JavaScript untuk membandingkan nilai dari satu array dan melihat apakah ada di array lain?
Mirip dengan in_array
fungsi PHP ?
sumber
Apakah ada cara dalam JavaScript untuk membandingkan nilai dari satu array dan melihat apakah ada di array lain?
Mirip dengan in_array
fungsi PHP ?
Tidak, tidak ada. Untuk alasan ini, sebagian besar pustaka populer datang dengan satu dalam paket utilitas mereka. Lihat inArray jQuery dan Prototype Array.indexOf untuk contoh.
Implementasi jQuery terhadapnya sesederhana yang Anda harapkan:
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
Jika Anda berurusan dengan jumlah elemen array yang waras di atas akan melakukan trik dengan baik.
EDIT : Whoops. Saya bahkan tidak memperhatikan Anda ingin melihat apakah array ada di dalam array lain. Menurut dokumentasi PHP ini adalah perilaku yang diharapkan dari PHP in_array
:
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found\n";
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found\n";
}
if (in_array('o', $a)) {
echo "'o' was found\n";
}
// Output:
// 'ph' was found
// 'o' was found
Kode yang diposting oleh Chris dan Alex tidak mengikuti perilaku ini. Alex adalah versi resmi dari indeks Prototipe, dan Chris lebih mirip PHP array_intersect
. Ini melakukan apa yang Anda inginkan:
function arrayCompare(a1, a2) {
if (a1.length != a2.length) return false;
var length = a2.length;
for (var i = 0; i < length; i++) {
if (a1[i] !== a2[i]) return false;
}
return true;
}
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(typeof haystack[i] == 'object') {
if(arrayCompare(haystack[i], needle)) return true;
} else {
if(haystack[i] == needle) return true;
}
}
return false;
}
Dan ini ujian saya di atas:
var a = [['p','h'],['p','r'],'o'];
if(inArray(['p','h'], a)) {
alert('ph was found');
}
if(inArray(['f','i'], a)) {
alert('fi was found');
}
if(inArray('o', a)) {
alert('o was found');
}
// Results:
// alerts 'ph' was found
// alerts 'o' was found
Perhatikan bahwa saya sengaja tidak memperpanjang prototipe Array karena umumnya merupakan ide yang buruk untuk melakukannya.
jQuery.inArray()
tidak tidak kembali boolean. Ini mengembalikan indeks elemen yang ditemukan atau -1 jika tidak ditemukanindexOf
w3schools.com/jsref/jsref_indexof_array.aspSekarang ada
Array.prototype.includes
:sumber
Array.indexOf
diperkenalkan di JavaScript 1.6, tetapi tidak didukung di browser yang lebih lama. Untungnya bab-bab di Mozilla telah melakukan semua kerja keras untuk Anda, dan memberi Anda ini untuk kompatibilitas:Bahkan ada beberapa cuplikan penggunaan yang berguna untuk kesenangan penulisan Anda.
sumber
this.length >>> 0
? Apakah itu konversi ke jenis Angka?Array.indexOf
sekarang distandarisasi oleh ECMAScript Fifth Edition sehingga harus dianggap sebagai cara 'asli' yang tepat untuk melakukannya. Anda masih perlu mengendus dan menyediakan cadangan ini untuk browser yang lebih lama untuk waktu yang lama. @harto: ya, itu dikonversithis.length
ke Nomor yang dapat direpresentasikan sebagai integer 32-bit yang tidak ditandatangani. AsliArray
hanya dapat memiliki panjang yang sudah sesuai dengan ini, tetapi spesifikasi menyatakan bahwa Anda dapat memanggilArray.prototype
metode pada objek asli-JS yang tidakArray
. Ini dan hal-hal penting lainnya yang memeriksa argumen adalah untuk menjamin kepatuhan spesifikasi mutlak.Jika indeks tidak berurutan, atau jika indeks tidak berurutan, kode dalam solusi lain yang tercantum di sini akan rusak. Solusi yang akan bekerja lebih baik mungkin:
Dan, sebagai bonus, inilah yang setara dengan array_search PHP (untuk menemukan kunci elemen dalam array:
sumber
Ada proyek yang disebut Locutus , ini mengimplementasikan fungsi-fungsi PHP dalam Javascript dan in_array () disertakan, Anda dapat menggunakannya persis seperti yang Anda gunakan dalam PHP.
Contoh penggunaan:
sumber
Anda cukup menggunakan fungsi "include" seperti yang dijelaskan dalam pelajaran ini di w3schools
sepertinya
sumber
sumber
Solusi jQuery tersedia, periksa ducumentation di sini: http://api.jquery.com/jquery.inarray/
sumber
Ada fungsi yang setara:
Lihat di sini: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
sumber
Jika Anda hanya ingin memeriksa apakah nilai tunggal dalam array, maka kode Paolo akan melakukan pekerjaan itu. Jika Anda ingin memeriksa nilai mana yang umum untuk kedua array, maka Anda akan menginginkan sesuatu seperti ini (menggunakan fungsi inArray Paolo):
Ini akan mengembalikan array nilai yang ada di keduanya
a
danb
. (Secara matematis, ini adalah persimpangan dari dua array.)EDIT: Lihat Kode Editan Paolo untuk solusi untuk masalah Anda. :)
sumber
Jika Anda membutuhkan semua parameter PHP yang tersedia, gunakan ini:
sumber
Tambahkan kode ini untuk Anda proyeksikan dan gunakan metode inArray objek-style
sumber
Dengan Dojo Toolkit , Anda akan menggunakannya
dojo.indexOf()
. Lihat dojo.indexOf untuk dokumentasi, dan Array Made Easy oleh Bryan Forbes untuk beberapa contoh.sumber
di mana tumpukan jerami adalah array dan jarum adalah elemen dalam array. Jika elemen tidak ditemukan akan dikembalikan tanpa ditentukan elemen lain yang sama.
sumber
sumber
Saya menemukan solusi jQuery besar di sini di SO.
Saya berharap seseorang memposting contoh bagaimana melakukan ini dalam garis bawah.
sumber
sumber
indexOf(needle) > 0
itu akan kembali salahSetara
in_array
denganunderscore
adalah _.indexOfContoh:
_.indexOf([3, 5, 8], 8); // returns 2, the index of 8 _.indexOf([3, 5, 8], 10); // returns -1, not found
sumber
Jika Anda akan menggunakannya di kelas, dan jika Anda lebih suka itu berfungsi (dan bekerja di semua browser):
Semoga ini bisa membantu seseorang :-)
sumber