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
В основному ви створюєте об'єкт буквально з двома властивостями (називається key
та value
) та вставляєте його (використовуючи push()
) у масив.
Редагувати: Таким чином, майже через 5 років ця відповідь отримує зворотній зв'язок, оскільки це не створює "нормального" об'єкта JS-літералу (ака-карта, ака-хеш, ака-словник).
Це буде , однак створення структури , що ОП просили (і який проілюстрований на інше питання пов'язаний з), який є масивом литералов об'єктів , кожен з яких має key
і value
властивості. Не запитуйте мене, навіщо потрібна така структура, але саме про це вимагали.
Але, але, якщо ви хочете в простому JS-об'єкті, а не в структурі, про яку попросили, - дивіться відповідь tcll , хоча позначення в дужці трохи громіздке, якщо у вас є просто прості ключі, які є дійсними іменами JS. Ви можете просто зробити це:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Або використовуйте звичайні крапки-нотації для встановлення властивостей після створення об'єкта:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Ви дійсно хочете , кронштейн позначення , якщо у вас є ключі , які мають прогалини в них, спеціальні символи, чи щось таке. Наприклад:
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";
Ви також хочете позначити дужку, якщо ваші ключі динамічні:
dict[firstName + " " + lastName] = "some value";
Зауважте, що ключі (імена властивостей) - це завжди рядки, а нерядкові значення будуть примусові до рядка при використанні в якості ключа. Наприклад, Date
об'єкт перетворюється на його рядкове представлення:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Однак зауважте, що це не обов'язково "просто працює", оскільки багато об'єктів матимуть рядкове подання, "[object Object]"
яке не створює для унікального ключа. Тому будьте обережні до чогось типу:
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" }
Незважаючи на objA
і objB
бути абсолютно різними і унікальними елементи, вони обидва мають однакову строкове представлення: "[object Object]"
.
Причина Date
не так поводиться в тому, що Date
прототип має власний toString
метод, який переосмислює подання рядків за замовчуванням. І ви можете зробити те ж саме:
// 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"
// }
(Зверніть увагу, що оскільки вище використовується випадкове число, зіткнення імен все ще можуть відбуватися дуже легко. Це просто для ілюстрації реалізації toString
.)
Отже, намагаючись використовувати об'єкти як ключі, JS буде використовувати власну toString
реалізацію об'єкта , якщо така є, або використовувати подання рядків за замовчуванням.