De la publicación:
Enviar una matriz JSON para recibirla como Diccionario <cadena, cadena>
Estoy tratando de hacer lo mismo que esa publicación. El único problema es que no sé cuáles son las claves y los valores por adelantado. Así que necesito poder agregar dinámicamente los pares clave y valor y no sé cómo hacerlo.
¿Alguien sabe cómo crear ese objeto y agregar pares de valores clave dinámicamente?
He intentado:
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
Pero eso no funciona.
javascript
dictionary
key-value
KenEucker
fuente
fuente
list = [["key1","value1"],["key2","value2"]]
. Algunos otros idiomas tienen un tipo de "par" o "tupla". tldr para dict real agregando:dict['key'] = "value"
Respuestas:
Básicamente, está creando un objeto literal con 2 propiedades (llamado
key
yvalue
) e insertándolo (usandopush()
) 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
yvalue
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:
O utilice la notación de puntos regular para establecer propiedades después de crear un objeto:
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:
También desea la notación de corchetes si sus claves son dinámicas:
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: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:A pesar
objA
yobjB
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 elDate
prototipo tiene untoString
método personalizado que anula la representación de cadena predeterminada. Y tu puedes hacer lo mismo:(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.fuente
dict
no es un diccionario asociativo. Es una matriz de objetos, cada uno de los cuales es un poco como un diccionario con dos claves: "clave" y "valor".funciona igual que python :)
salida de consola:
fuente
{}
lugar de paréntesisEs tan simple como:
o
luego
fuente
Como ha declarado que desea un objeto de diccionario (y no una matriz como supongo que algunos lo entienden), creo que esto es lo que busca:
fuente
JavaScript
Object
es en sí mismo como un diccionario. No hay necesidad de reinventar la rueda.Violín
fuente
Puedes usar mapas
Map
como este:fuente
Me encontré con esta pregunta en busca de algo similar. Me dio suficiente información para ejecutar una prueba y obtener la respuesta que quería. Por lo tanto, si alguien más quiere saber cómo agregar o buscar dinámicamente un par {clave: 'valor'} en un objeto JavaScript, esta prueba debería decirle todo lo que necesita saber.
salida
fuente
fuente
key1 = dictionary.key1
lugar de indexarkey1 = dictionary["key1"]
Puede crear un Diccionario de clase para poder interactuar fácilmente con la lista Diccionario:
fuente
¿Qué tal la línea para crear un par de valores clave?
y alguna función de iterador como
reduce
convertir dinámicamente una matriz a un diccionariofuente
En javascript moderno (ES6 / ES2015), uno debe usar la estructura de datos del Mapa para el diccionario. La estructura de datos del Mapa en ES6 le permite usar valores arbitrarios como claves.
Si todavía usa ES5, la forma correcta de crear un diccionario es crear un objeto sin un prototipo de la siguiente manera.
Hay muchas ventajas de crear un diccionario sin un objeto prototipo. A continuación, vale la pena leer los blogs sobre este tema.
dict-pattern
objetos como mapas
fuente
Sería de gran ayuda saber cuál es el resultado final deseado, pero creo que esto es lo que quieres:
fuente
Me encontré con este problema ... pero dentro de un bucle for. La solución principal no funcionó (cuando se usaban variables (y no cadenas) para los parámetros de la función push), y las otras no contabilizaban los valores clave basados en variables. Me sorprendió que este enfoque (que es común en PHP) funcionó ...
fuente
Una mejora en
var dict = {}
es usarvar dict = Object.create(null)
.Esto creará un objeto vacío que no tiene
Object.prototype
como prototipo.fuente
fuente