Saya mencari cara terbaik untuk "menambahkan" beberapa objek JavaScript (array asosiatif).
Misalnya, diberikan:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
apa cara terbaik untuk menghitung:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Jawaban:
ECMAscript 6 diperkenalkan
Object.assign()
untuk mencapai ini secara native dalam Javascript.Dokumentasi MDN di Object.assign ()
Object.assign
didukung di banyak browser modern, tetapi belum semuanya. Gunakan transpiler seperti Babel dan Traceur untuk menghasilkan JavaScript ES5 yang kompatibel dengan versi sebelumnya.sumber
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
untuk menggabungkan larik objek, adalah dengan menggunakan operator penyebaran:Object.assign( ...objects )
Anda bisa menggunakan jquery
$.extend
seperti ini:sumber
d = $.extend({},a,b,c);
Ini harus melakukannya:
Keluaran:
sumber
length
mencari ukuran larik di setiap pemanggilan? Saya sangat terbiasa menulisfor (var i = 0, len = array.length; i < len; ++i)
sehingga saya tidak dapat mengingat sepenuhnya mengapa saya mulai melakukannya.ECMAScript 6 telah menyebarkan sintaks . Dan sekarang Anda bisa melakukan ini:
sumber
Menggarisbawahi memiliki beberapa metode untuk melakukan ini;
1. _.extend (tujuan, * sumber)
Salin semua properti di objek sumber ke objek tujuan , dan kembalikan objek tujuan .
Atau
2. _.defaults (objek, * defaults)
Isi properti yang tidak ditentukan dalam objek dengan nilai dari objek default , dan kembalikan objek tersebut .
Atau
sumber
Mengapa fungsi harus dibatasi ke 3 argumen? Periksa juga
hasOwnProperty
.sumber
Kloning dangkal (tidak termasuk prototipe) atau penggabungan objek sekarang dapat dilakukan menggunakan sintaks yang lebih pendek dari Object.assign () .
Sintaks penyebaran untuk literal objek diperkenalkan di ECMAScript 2018 ):
Operator Spread (...) didukung di banyak browser modern tetapi tidak semuanya.
Jadi, disarankan untuk menggunakan transpiler seperti Babel untuk mengubah kode ECMAScript 2015+ menjadi versi JavaScript yang kompatibel dengan versi sebelumnya di browser atau lingkungan lama dan lama.
Ini adalah kode setara yang akan dihasilkan Babel untuk Anda:
sumber
Perhatian: Properti yang ada di objek sebelumnya akan ditimpa.
sumber
a === d
pada akhirnya. Itu mungkin baik-baik saja dan mungkin juga tidak.Sangat mudah menggunakan operator penyebaran ES7 untuk suatu objek, di konsol browser Anda
sumber
Untuk menggabungkan sejumlah dinamis objek, kita dapat menggunakan
Object.assign
dengan spread sintaks .Fungsi di atas menerima sejumlah objek, menggabungkan semua propertinya menjadi objek baru dengan properti dari objek selanjutnya menimpa objek dari objek sebelumnya.
Demo:
Tampilkan cuplikan kode
Untuk menggabungkan larik objek, metode serupa dapat diterapkan.
Demo:
Tampilkan cuplikan kode
sumber
Mungkin, cara tercepat, efisien, dan lebih umum adalah ini (Anda dapat menggabungkan sejumlah objek dan bahkan menyalin ke yang pertama -> assign):
Ini juga memungkinkan Anda untuk memodifikasi objek pertama saat melewati referensi. Jika Anda tidak menginginkan ini tetapi ingin memiliki objek yang benar-benar baru yang berisi semua properti, maka Anda bisa meneruskan {} sebagai argumen pertama.
gabungan_objek dan objek1 keduanya berisi properti objek1, objek2, objek3.
Dalam kasus ini, gabungan_object berisi properti object1, object2, object3 tetapi object1 tidak dimodifikasi.
Periksa di sini: https://jsfiddle.net/ppwovxey/1/
Catatan: objek JavaScript diteruskan dengan referensi.
sumber
ES6 ++
Pertanyaannya adalah menambahkan berbagai berbeda benda menjadi satu.
katakanlah Anda memiliki satu objek dengan beberapa kunci yang merupakan objek:
ini adalah solusi yang saya temukan (masih harus foreach: /)
Dengan melakukan ini kita dapat secara dinamis menambahkan SEMUA kunci objek menjadi satu.
sumber
Paling sederhana: operator penyebaran
sumber
sumber