Saya memiliki dua array Objek JavaScript yang ingin saya bandingkan untuk melihat apakah keduanya sama. Objek mungkin tidak (dan kemungkinan besar tidak akan) berada dalam urutan yang sama di setiap larik. Setiap larik tidak boleh memiliki lebih dari 10 objek. Saya pikir jQuery mungkin memiliki solusi elegan untuk masalah ini, tetapi saya tidak dapat menemukan banyak hal secara online.
Saya tahu bahwa $.each(array, function(){})
solusi bersarang yang kasar dapat berfungsi, tetapi apakah ada fungsi bawaan yang tidak saya sadari?
Terima kasih.
[0,1] == {0:0,1:1,length=2}
$(arr1).not(arr2).length == 0
tidak cukup?not
merupakan fungsi filter, bukan fungsi kesetaraan. Cobalah dengan[1,2]
dan[1]
. Dalam satu urutan, Anda akan mendapatkan[]
, dan di tempat lain, Anda akan mendapatkan[2]
.not
tidak lagi berfungsi dengan objek umum mulai 3.0.0-rc1. Lihat github.com/jquery/jquery/issues/3147Saya juga mencari ini hari ini dan menemukan: http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD
Tidak tahu apakah itu solusi yang baik meskipun mereka menyebutkan beberapa pertimbangan kinerja yang diperhitungkan.
Saya suka ide metode pembantu jQuery. @David Saya lebih suka melihat metode perbandingan Anda berfungsi seperti:
Saya tidak masuk akal bagi saya untuk melakukan:
dimana a dan b adalah array. Biasanya ketika Anda $ (sesuatu) Anda akan melewati string pemilih untuk bekerja dengan elemen DOM.
Juga tentang pengurutan dan 'caching' array yang diurutkan:
Sepertinya yang perlu kita lakukan adalah menyalin array sebelum mengerjakannya. Jawaban terbaik yang dapat saya temukan untuk bagaimana melakukan itu dengan cara jQuery tidak lain adalah oleh John Resig di SO! Apa cara paling efisien untuk mengkloning objek dalam JavaScript? (lihat komentar pada jawabannya untuk versi array dari resep kloning objek)
Dalam hal ini saya pikir kode untuk itu adalah:
sumber
Pendekatan saya sangat berbeda - saya meratakan kedua koleksi menggunakan JSON.stringify dan menggunakan perbandingan string normal untuk memeriksa kesetaraan.
Yaitu
NB: Harap dicatat bahwa metodenya mengasumsikan bahwa kedua Koleksi diurutkan dengan cara yang sama, jika tidak, itu akan memberi Anda hasil yang salah!
sumber
Ubah kedua larik menjadi string dan bandingkan
sumber
Saya menemukan diskusi ini karena saya membutuhkan cara untuk membandingkan array dan objek secara mendalam. Menggunakan contoh di sini, saya menemukan yang berikut (dipecah menjadi 3 metode untuk kejelasan):
Menguji
sumber
Dalam kasus saya, array yang dibandingkan hanya berisi angka dan string . Solusi ini berhasil untuk saya:
Mari kita uji!
sumber
Menurut saya tidak ada cara "jQuery" yang baik untuk melakukan ini, tetapi jika Anda memerlukan efisiensi, petakan salah satu array dengan kunci tertentu (salah satu bidang objek unik), lalu lakukan perbandingan dengan mengulang melalui array lainnya dan membandingkannya dengan peta, atau larik asosiatif, yang baru saja Anda buat.
Jika efisiensi tidak menjadi masalah, bandingkan saja setiap objek di A dengan setiap objek di B. Selama | A | dan | B | kecil, kamu harus baik-baik saja.
sumber
Nah, jika Anda hanya ingin membandingkan konten array, ada fungsi jQuery $ .inArray () yang berguna
sumber
Ubah array menjadi string dan bandingkan
sumber
Satu liner bagus dari Sudhakar R sebagai metode global jQuery.
sumber
Saya juga menemukan ini ketika ingin melakukan beberapa perbandingan array dengan jQuery. Dalam kasus saya, saya memiliki string yang saya tahu sebagai array:
Tapi saya peduli apakah itu pertandingan lengkap atau hanya pertandingan parsial, jadi saya menggunakan sesuatu seperti berikut ini, berdasarkan jawaban Sudhakar R.
sumber
Jika duplikat penting sehingga
[1, 1, 2]
tidak boleh sama[2, 1]
tetapi harus sama[1, 2, 1]
, berikut adalah solusi penghitungan referensi:Ini biola untuk dimainkan .
sumber
sumber
Coba ini
sumber