Apa cara terbaik / standar untuk menggabungkan dua array asosiatif dalam JavaScript? Apakah semua orang hanya melakukannya dengan memutar for
lingkaran mereka sendiri ?
javascript
object
Wilhelm
sumber
sumber
Jawaban:
dengan jquery Anda bisa menelepon
$.extend
(assoc. array adalah objek di js)
lihat di sini: http://api.jquery.com/jQuery.extend/
sunting: Seperti yang disarankan rymo, lebih baik melakukannya dengan cara ini:
Seperti di sini obj1 (dan obj2) tetap tidak berubah.
sunting2: Pada tahun 2018 cara untuk melakukannya adalah melalui
Object.assign
:Jika bekerja dengan ES6 ini dapat dicapai dengan Penyebar Operator :
sumber
obj1
, gunakan objek kosong sebagai target:$.extend({}, obj1, obj2)
Object.assign()
, yang tidak bergantung pada JQuery jika Anda belum menggunakan perpustakaan.Sekarang di 2016 saya akan mengatakan cara terbaik / standar adalah Object.assign ()
Javascript Murni. Tidak diperlukan jQuery.
Informasi lebih lanjut, contoh dan polyfill di sini:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
sumber
Inilah cara Prototype melakukannya:
disebut sebagai, misalnya:
EDIT : menambahkan hasOwnProperty () periksa sebagaimana ditunjukkan oleh bucabay dalam komentar
sumber
Sederhana saja ...
sumber
arrau1.prototype
hasOwnProperty
cek itu. Mengacu pada objek sebagai array juga menyesatkan (mereka objek), nama-nama arg harus menyampaikan bahwa array2 dimutasi atau objek baru harus dikembalikan. Saya akan mengedit jawaban tetapi pada dasarnya itu akan menjadi jawaban yang persis diedit Jonathan Fingland yang telah diperbaiki.Garis bawah juga memiliki metode perluasan:
sumber
Di dojo , 2-objek / array "merge" adalah
lang.mixin(destination, source)
- Anda juga dapat mencampur beberapa sumber menjadi satu tujuan, dll - lihat referensi fungsi mixin untuk detailnya.sumber
apakah Anda ingin menimpa properti jika namanya sama tetapi nilainya tidak?
Dan apakah Anda ingin secara permanen mengubah salah satu objek asli,
atau Anda ingin objek yang digabungkan kembali?
sumber
Menggulung Fungsi Perpanjangan / Campuran Anda Sendiri
...
...
Ini hanya memperluas percikan objek, secara rekursif. Juga, perhatikan bahwa fungsi rekursif ini adalah TCO ( Tail-Call Dioptimalkan ) karena kembalinya adalah panggilan terakhir untuk dirinya sendiri.
Selain itu, Anda mungkin menginginkan properti yang ditargetkan . Dalam hal ini, Anda mungkin ingin untuk menyingkat objek berdasarkan
id
,quantity
atau properti lain. Pendekatan ini dapat memiliki buku kecil yang ditulis tentang hal itu dan memerlukan penjajaran objek dan bisa menjadi sangat kompleks. Saya telah menulis perpustakaan kecil untuk ini yang tersedia berdasarkan permintaan.Semoga ini membantu!
sumber
sumber
Pada 2019 Anda memiliki 2 opsi yang baik:
Penugasan objek [ doc ]
Penyebaran objek [ doc ]
Yang pertama cenderung lebih aman, lebih standar dan polivalen. Pro dan kontra yang bagus di sini
sumber
Yahoo UI (YUI) juga memiliki fungsi pembantu untuk ini:
http://developer.yahoo.com/yui/examples/yahoo/yahoo_merge.html
sumber
jquery memiliki boolean untuk salinan dalam. Anda dapat melakukan sesuatu seperti itu:
Anda juga dapat mengedit fungsi ini untuk mendukung n-array untuk digabung.
Jadi sekarang bisa kamu lakukan
sumber
Saya membutuhkan penggabungan objek dalam. Jadi semua jawaban lain tidak banyak membantu saya. _.extend dan jQuery.extend melakukannya dengan baik, kecuali Anda memiliki array rekursif seperti yang saya lakukan. Tapi itu tidak terlalu buruk, Anda dapat memprogramnya dalam lima menit:
sumber
Untuk menggabungkan array di jQuery, bagaimana dengan $ .merge?
sumber
Solusi rekursif (meluas juga array objek) + null diperiksa
Tes
sumber
Object.getOwnPropertyNames is not a function
akan merusak aplikasi.Inilah solusi terbaik.
Juga,
obj1
bisa tumbuh di dalam lingkaran tanpa masalah. (katakanlahobj2
dinamis)sumber