var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
Pada dasarnya, Anda membuat objek literal dengan 2 properti (dipanggil key
dan value
) dan memasukkannya (menggunakan push()
) ke dalam array.
Sunting: Jadi hampir 5 tahun kemudian, jawaban ini semakin menurun karena tidak membuat literal objek JS "normal" (alias peta, alias hash, alias kamus).
Hal ini namun menciptakan struktur yang OP meminta (dan yang diilustrasikan pada pertanyaan lain yang terhubung ke), yang merupakan array literal objek , masing-masing dengan key
dan value
sifat. Jangan tanya saya mengapa struktur itu diperlukan, tapi itu yang diminta.
Tapi, tetapi, jika apa yang Anda inginkan dalam objek JS sederhana - dan bukan struktur yang diminta OP - lihat jawaban tcll , meskipun notasi braket sedikit rumit jika Anda hanya memiliki kunci sederhana yang merupakan nama JS yang valid. Anda bisa melakukan ini:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Atau gunakan notasi titik biasa untuk mengatur properti setelah membuat objek:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Anda tidak ingin notasi braket jika Anda punya kunci yang memiliki ruang di dalamnya, karakter khusus, atau hal-hal seperti itu. Misalnya:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
Anda juga ingin notasi braket jika kunci Anda dinamis:
dict[firstName + " " + lastName] = "some value";
Perhatikan bahwa kunci (nama properti) selalu berupa string, dan nilai non-string akan dipaksa ke string saat digunakan sebagai kunci. Misalnya Date
objek dikonversi ke representasi stringnya:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Perhatikan bahwa ini tidak selalu "hanya berfungsi", karena banyak objek akan memiliki representasi string seperti "[object Object]"
yang tidak membuat kunci non-unik. Jadi berhati-hatilah terhadap sesuatu seperti:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
Meskipun objA
dan objB
menjadi elemen yang sama sekali berbeda dan unik, mereka berdua memiliki representasi string dasar yang sama: "[object Object]"
.
Alasannya Date
tidak berperilaku seperti ini adalah bahwa Date
prototipe memiliki toString
metode kustom yang mengesampingkan representasi string default. Dan Anda dapat melakukan hal yang sama:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(Perhatikan bahwa karena di atas menggunakan angka acak , tabrakan nama masih dapat terjadi dengan sangat mudah. Hanya untuk menggambarkan implementasi dari toString
.)
Jadi ketika mencoba menggunakan objek sebagai kunci, JS akan menggunakan toString
implementasi objek itu sendiri , jika ada, atau menggunakan representasi string default.