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
Básicamente, está creando un objeto literal con 2 propiedades (llamado key
y value
) e insertándolo (usando push()
) en la matriz.
Editar: Entonces, casi 5 años después, esta respuesta está recibiendo votos negativos porque no está creando un literal de objeto JS "normal" (también conocido como map, aka hash, aka dictionary).
Sin embargo, está creando la estructura que OP solicitó (y que se ilustra en la otra pregunta vinculada a), que es una matriz de literales de objetos , cada uno con key
y value
propiedades. No me pregunten por qué se requería esa estructura, pero es la que se solicitó.
Pero, pero, si lo que desea en un objeto JS simple, y no la estructura solicitada por OP, vea la respuesta de tcll , aunque la notación de corchetes es un poco engorrosa si solo tiene claves simples que son nombres válidos de JS. Puedes hacer esto:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
O utilice la notación de puntos regular para establecer propiedades después de crear un objeto:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Usted no quiere que la notación de corchetes si tiene teclas que tienen espacios en ellos, caracteres especiales, o cosas por el estilo. P.ej:
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";
También desea la notación de corchetes si sus claves son dinámicas:
dict[firstName + " " + lastName] = "some value";
Tenga en cuenta que las claves (nombres de propiedades) son siempre cadenas, y los valores que no son cadenas se convertirán en una cadena cuando se usen como clave. Por ejemplo, un Date
objeto se convierte en su representación de cadena:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Sin embargo, tenga en cuenta que esto no necesariamente "solo funciona", ya que muchos objetos tendrán una representación de cadena como la "[object Object]"
que no constituye una clave no única. Así que ten cuidado con algo como:
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" }
A pesar objA
y objB
ser completamente diferentes y únicos elementos, los dos tienen la misma representación básica cadena: "[object Object]"
.
La razón Date
no se comporta así es que el Date
prototipo tiene un toString
método personalizado que anula la representación de cadena predeterminada. Y tu puedes hacer lo mismo:
// 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"
// }
(Tenga en cuenta que dado que lo anterior usa un número aleatorio , las colisiones de nombres aún pueden ocurrir muy fácilmente. Es solo para ilustrar una implementación de toString
).
Entonces, cuando intente usar objetos como claves, JS usará la propia toString
implementación del objeto , si la hay, o usará la representación de cadena predeterminada.