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
Basicamente, você está criando um literal de objeto com 2 propriedades (chamado key
e value
) e o inserindo (usando push()
) na matriz.
Edit: Então, quase 5 anos depois, esta resposta está recebendo votos negativos porque não está criando um literal de objeto JS "normal" (aka mapa, aka hash, aka dicionário).
No entanto, está criando a estrutura que o OP solicitou (e que é ilustrada na outra questão vinculada a), que é uma matriz de literais de objetos , cada um com propriedades key
e value
. Não me pergunte por que essa estrutura foi necessária, mas foi solicitada.
Mas, mas, se o que você deseja em um objeto JS simples - e não na estrutura solicitada pelo OP - veja a resposta do tcll , embora a notação entre colchetes seja um pouco complicada se você tiver apenas chaves simples com nomes JS válidos. Você pode fazer isso:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Ou use a notação de ponto regular para definir propriedades depois de criar um objeto:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Você não quer que a notação de colchetes se você tem as chaves que têm espaços entre eles, caracteres especiais, ou coisas assim. Por exemplo:
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";
Você também deseja notação de colchete se suas chaves forem dinâmicas:
dict[firstName + " " + lastName] = "some value";
Observe que as chaves (nomes de propriedades) são sempre cadeias e os valores que não são de cadeia serão coagidos a uma cadeia quando usados como uma chave. Por exemplo, um Date
objeto é convertido em sua representação de string:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Observe, no entanto, que isso não necessariamente "apenas funciona", pois muitos objetos terão uma representação de string como "[object Object]"
que não cria uma chave não exclusiva. Portanto, tenha cuidado com 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" }
Apesar objA
eobjB
por serem elementos completamente diferentes e únicos, ambos têm a mesma representação básica string: "[object Object]"
.
O motivo Date
não se comporta dessa maneira é que o Date
protótipo possui um toString
método personalizado que substitui a representação de string padrão. E você pode fazer o mesmo:
// 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"
// }
(Observe que, como o descrito acima, usa um método aleatório número , as colisões de nomes ainda podem ocorrer com muita facilidade. É apenas para ilustrar uma implementação de toString
.)
Portanto, ao tentar usar objetos como chaves, o JS usará a própria toString
implementação do objeto , se houver, ou usará a representação de sequência padrão.