Inilah objek literal saya:
var obj = {key1: value1, key2: value2};
Bagaimana saya bisa menambahkan bidang key3
dengan value3
objek?
javascript
object-literal
James Skidmore
sumber
sumber
Jawaban:
Ada dua cara untuk menambahkan properti baru ke objek:
Menggunakan notasi titik:
Menggunakan notasi braket persegi:
Formulir pertama digunakan ketika Anda tahu nama properti. Bentuk kedua digunakan ketika nama properti ditentukan secara dinamis. Seperti dalam contoh ini:
Sebuah nyata susunan JavaScript dapat dibangun baik menggunakan:
Notasi literal Array:
Notasi konstruktor Array:
sumber
Object.keys({"b": 1, "c": 3, "a": 2}).sort().forEach(console.log);
length
properti tidak disetel karena bukan array, ini objek / peta / kamus.Tahun 2017 jawaban:
Object.assign()
Object.assign (dest, src1, src2, ...) menggabungkan objek.
Ini menimpa
dest
dengan properti dan nilai objek sumber (namun banyak), kemudian kembalidest
.Contoh langsung
Tahun 2018 jawabannya: operator penyebaran objek
{...}
Dari MDN :
Contoh langsung
Ia bekerja di Chrome saat ini dan Firefox saat ini. Mereka mengatakan itu tidak bekerja di Edge saat ini.
Tahun 2019 jawabannya
Operator penugasan objek+=
:Ups ... Saya terbawa suasana. Penyelundupan informasi dari masa depan adalah ilegal. Dikaburkan!sumber
const
danlet
alih-alihvar
, haruskah itu cara 2018?const
karena menghilangkan keuntungan itu. Setiap kali saya menggunakannya, itu menghambat pengembangan.Year 2019 answer ... Opps ...
Porsi Anda layak terima kasih, Anda membuat hari saya . Jawaban Terbaik +1Saya telah menyukai LoDash / Underscore ketika menulis proyek yang lebih besar.
Menambahkan dengan
obj['key']
atauobj.key
semua jawaban JavaScript murni yang solid. Namun, kedua pustaka LoDash dan Underscore menyediakan banyak fungsi nyaman tambahan saat bekerja dengan Objects dan Array secara umum..push()
adalah untuk Array , bukan untuk objek .Tergantung apa yang Anda cari, ada dua fungsi spesifik yang mungkin baik untuk digunakan dan memberikan fungsionalitas yang mirip dengan nuansa
arr.push()
. Untuk info lebih lanjut periksa dokumen, mereka memiliki beberapa contoh bagus di sana._.merge (khusus Lodash)
Objek kedua akan menimpa atau menambah objek dasar.
undefined
nilai tidak disalin._.extend / _.assign
Objek kedua akan menimpa atau menambah objek dasar.
undefined
akan disalin._.defaults
Objek kedua berisi default yang akan ditambahkan ke objek dasar jika tidak ada.
undefined
nilai akan disalin jika kunci sudah ada.$ .extend
Selain itu, mungkin bermanfaat menyebutkan jQuery.extend, fungsinya mirip dengan _.merge dan mungkin merupakan opsi yang lebih baik jika Anda sudah menggunakan jQuery.
Objek kedua akan menimpa atau menambah objek dasar.
undefined
nilai tidak disalin.Object.assign ()
Mungkin perlu menyebutkan Object.assign ES6 / ES2015, fungsinya mirip dengan _.merge dan mungkin merupakan opsi terbaik jika Anda sudah menggunakan polyfill ES6 / ES2015 seperti Babel jika Anda ingin membuat polyfill sendiri .
Objek kedua akan menimpa atau menambah objek dasar.
undefined
akan disalin.sumber
_.extend
alias lebih universal karena pustaka garis bawah masih menggunakanextend
tidakmerge
. Saya akan memperbarui jawaban saya.Anda dapat menggunakan salah satu dari ini (disediakan key3 adalah kunci acutal yang ingin Anda gunakan)
atau
Jika key3 adalah variabel, maka Anda harus melakukan:
Setelah ini, meminta
arr.a_key
akan mengembalikan nilaivalue3
, literal3
.sumber
karena arr Anda sebenarnya bukan array ... Ini adalah objek prototipe. Array nyata adalah:
tapi itu masih tidak benar. Sebenarnya harus:
sumber
sumber
Cukup menambahkan properti:
Dan kami ingin menambahkan
prop2 : 2
objek ini, ini adalah opsi yang paling nyaman:object.prop2 = 2;
object['prop2'] = 2;
Jadi yang mana yang kita gunakan?
Operator titik sintaks lebih bersih dan harus digunakan sebagai default (imo). Namun, operator titik tidak mampu menambahkan kunci dinamis ke objek, yang dapat sangat berguna dalam beberapa kasus. Berikut ini sebuah contoh:
Menggabungkan objek:
Ketika kita ingin menggabungkan properti dari 2 objek, ini adalah opsi yang paling nyaman:
Object.assign()
, mengambil objek target sebagai argumen, dan satu atau lebih objek sumber dan akan menggabungkan keduanya. Sebagai contoh:...
Yang mana yang kita gunakan?
Object.assign()
lebih dinamis karena kita memiliki akses ke semua objek yang dilewatkan sebagai argumen dan dapat memanipulasi mereka sebelum mereka ditugaskan ke Objek baru.sumber
Saya tahu sudah ada jawaban yang diterima untuk ini, tetapi saya pikir saya akan mendokumentasikan ide saya di suatu tempat. Tolong [orang-orang] merasa bebas untuk melubangi ide ini, karena saya tidak yakin apakah itu solusi terbaik ... tapi saya baru saja menyatukan ini beberapa menit yang lalu:
Anda akan menggunakannya dengan cara ini:
Karena, fungsi prototipe mengembalikan
this
Anda dapat terus.push
menghubungkan ke akhirobj
variabel Anda :obj.push(...).push(...).push(...);
Fitur lain adalah bahwa Anda bisa melewatkan array atau objek lain sebagai nilai dalam argumen fungsi push. Lihat biola saya untuk contoh kerja: http://jsfiddle.net/7tEme/
sumber
TypeError: 'undefined' is not a function (evaluating 'U[a].exec(s)')
yang aneh karena bekerja di jsfiddle bahkan dengan jquery1.9Performa
Hari ini 2020.01.14 Saya melakukan tes pada MacOs HighSierra 10.13.6 di Chrome v78.0.0, Safari v13.0.4 dan Firefox v71.0.0, untuk solusi yang dipilih. Saya membagi solusi untuk bisa berubah (huruf pertama M) dan tidak berubah (huruf pertama I). Saya juga memberikan beberapa solusi yang tidak berubah (IB, IC, ID / IE) yang belum dipublikasikan dalam jawaban atas pertanyaan ini
Kesimpulan
obj.key3 = "abc"
(MA, MB) adalah yang tercepat{...obj, key3:'abc'}
danObject.assign
(IA, IB) tercepatDetail
Dalam cuplikan di bawah ini ada solusi yang telah diuji, Anda dapat memilih dari pengujian di mesin Anda DI SINI
Tampilkan cuplikan kode
sumber
Anda dapat membuat kelas dengan jawaban @ Ionuț G. Stan
Membuat objek baru dengan kelas terakhir:
Mencetak objek
Mencetak Kunci
Saya pemula dalam javascript, komentar dipersilahkan. Bekerja untukku.
sumber
Dua cara yang paling sering digunakan telah disebutkan dalam sebagian besar jawaban
Satu lagi cara untuk mendefinisikan properti menggunakan Object.defineProperty ()
Metode ini berguna ketika Anda ingin memiliki kontrol lebih besar saat mendefinisikan properti. Properti yang didefinisikan dapat ditetapkan sebagai enumerable, dapat dikonfigurasi, dan dapat ditulis oleh pengguna.
sumber
Contoh Anda menunjukkan Obyek, bukan Array. Dalam hal itu, cara yang disukai untuk menambahkan bidang ke Objek adalah dengan hanya menetapkannya, seperti:
sumber
didukung oleh sebagian besar browser, dan memeriksa apakah kunci objek tersedia atau tidak ingin Anda tambahkan, jika tersedia itu mengabaikan nilai kunci yang ada dan tidak tersedia itu menambahkan kunci dengan nilai
Contoh 1
contoh 2
contoh 3
sumber
Jika Anda memiliki beberapa objek Objek anonim di dalam Objek dan ingin menambahkan Objek lain yang berisi pasangan kunci / nilai, lakukan ini:
Firebug 'the Object:
pengembalian:
Kode:
akan menambah
Object {name="Peanuts", value="12"}
Obyek Comicbooksumber
Entah
obj['key3'] = value3
atauobj.key3 = value3
akan menambahkan pasangan baru keobj
.Namun, saya tahu jQuery tidak disebutkan, tetapi jika Anda menggunakannya, Anda dapat menambahkan objek melalui
$.extend(obj,{key3: 'value3'})
. Misalnya:jQuery. memperpanjang (target [, Object1] [, objectN]) menggabungkan isi dari dua atau lebih objek bersama-sama ke objek pertama.
Dan itu juga memungkinkan penambahan / modifikasi rekursif dengan
$.extend(true,object1,object2);
:Tampilkan cuplikan kode
sumber
Cara singkat dan elegan dalam spesifikasi Javascript berikutnya (kandidat tahap 3) adalah:
obj = { ... obj, ... { key3 : value3 } }
Diskusi yang lebih dalam dapat ditemukan di Object spread vs Object.assign dan di situs Dr. Axel Rauschmayers .
Ini sudah bekerja di node.js sejak rilis 8.6.0.
Vivaldi, Chrome, Opera, dan Firefox di rilis terbaru tahu fitur ini juga, tetapi Mirosoft tidak sampai hari ini, baik di Internet Explorer maupun di Edge.
sumber
Output seperti ini: -
sumber
Anda dapat menambahkannya dengan cara ini:
atau dengan cara ini:
Jawaban yang menyarankan memasukkan objek ke variabel
key3
hanya akan bekerja jika nilaikey3
itu'key3'
.sumber
Menurut Accessors Properti yang didefinisikan dalam ECMA-262 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , P67), ada dua cara yang dapat Anda lakukan untuk menambahkan properti ke objek yang ada. Semua dua cara ini, mesin Javascript akan memperlakukan mereka sama.
Cara pertama adalah menggunakan notasi titik:
Tetapi dengan cara ini, Anda harus menggunakan IdentifierName setelah notasi titik.
Cara kedua adalah menggunakan notasi braket:
dan bentuk lain:
Dengan cara ini, Anda bisa menggunakan Ekspresi (termasuk IdentifierName ) dalam notasi braket.
sumber
Kita bisa melakukan ini dengan cara ini juga.
sumber
Karena ini masalah masa lalu tetapi masalah saat ini. Akan menyarankan satu solusi lagi: Cukup berikan kunci dan nilai ke fungsi dan Anda akan mendapatkan objek peta.
sumber
Untuk menambahkan pasangan nilai kunci ke objek, maka untuk bekerja dengan elemen itu pertama-tama lakukan ini:
sumber
Cara terbaik untuk mencapai hal yang sama dinyatakan di bawah ini:
sumber
Anda dapat membuat objek baru dengan menggunakan
{[key]: value}
sintaks:Dengan sintaksis sebelumnya Anda sekarang dapat menggunakan sintaksis penyebaran
{...foo, ...bar}
untuk menambahkan objek baru tanpa mengubah nilai lama Anda:sumber