Tengo un objeto que contiene alertas y algo de información sobre ellas:
var alerts = {
1: { app: 'helloworld', message: 'message' },
2: { app: 'helloagain', message: 'another message' }
}
Además de esto, tengo una variable que dice cuántas alertas existen, alertNo
. Mi pregunta es, cuando voy a agregar una nueva alerta, ¿hay alguna forma de agregar la alerta al alerts
objeto?
javascript
Steve Gattuso
fuente
fuente
Respuestas:
¿Qué tal almacenar las alertas como registros en una matriz en lugar de las propiedades de un solo objeto?
Y luego para agregar uno, simplemente use
push
:fuente
alerts[3] = { app: 'hello3', message: 'message 3' }
. Con esto se puede acceder a un mensaje por id:alerts[2] => { app: 'helloworld', message: 'message' }
. Obtener la longitud es simplemente:Object.keys(alerts).length
(ese bit es más fácil con las matrices)jQuery
$.extend(obj1, obj2)
fusionaría 2 objetos para usted, pero realmente debería estar usando una matriz.fuente
Puede hacer esto con Object.assign () . A veces necesita una matriz, pero cuando trabaja con funciones que esperan un solo objeto JSON, como una llamada OData, he encontrado este método más simple que crear una matriz solo para descomprimirlo.
EDITAR: para abordar el comentario sobre la obtención de la siguiente clave, puede obtener una matriz de claves con la función Object.keys () ; consulte la respuesta de Vadi para ver un ejemplo de incremento de la clave. Del mismo modo, puede obtener todos los valores con Object.values () y pares clave-valor con Object.entries () .
fuente
Como señalaron otras respuestas, puede que le resulte más fácil trabajar con una matriz.
Si no:
intentalo:
https://jsbin.com/yogimo/edit?js,console
fuente
while(alerts[size]) size++;
Y probablemente cambiar el nombresize
anewId
.Puede usar la sintaxis de propagación de la siguiente manera ...
fuente
Ahora con ES6 tenemos un operador de propagación muy potente (... Object) que puede hacer este trabajo muy fácil. Se puede hacer de la siguiente manera:
Eso es. Agregará la clave que desee. ¡¡Espero que esto ayude!!
fuente
Realmente debería ir con la variedad de sugerencias de alertas, pero de lo contrario agregar al objeto que mencionó se vería así:
Pero como no debe usar números literales como nombres, cite todo y vaya con
o puede convertirlo en una matriz de objetos.
Accediendo parece
fuente
¿Tiene la capacidad de cambiar la estructura más externa a una matriz? Entonces se vería así
Entonces, cuando necesita agregar uno, simplemente puede insertarlo en la matriz
Luego tiene un índice basado en cero incorporado para la forma en que se enumeran los errores.
fuente
Mucho más fácil con ES6:
fuente
Como alternativa, en ES6, se podría usar la sintaxis extendida.
${Object.keys(alerts).length + 1}
vuelve a continuaciónid
para alerta.fuente
Lo siento, ¡pero no puedo comentar sus respuestas debido a mi reputación! ... así que, si desea modificar la estructura de su objeto, debe hacerlo que dice Thane Plummer, pero un pequeño truco si no te importa dónde para colocar el elemento: se insertará en la primera posición si no especifica el número para la inserción.
Esto es maravilloso si desea pasar un objeto Json, por ejemplo, a una llamada de función mongoDB e insertar una nueva clave dentro de las condiciones que recibe. En este caso, insertaré un elemento myUid con información de una variable dentro de mi código:
fuente
[Javascript] Después de un poco de jiggery pokery, esto funcionó para mí:
El problema que necesitaba resolver era que podría tener cualquier número de eventos y todos tendrían el mismo nombre: LastPostedDateTime todo lo que es diferente es la fecha y la hora.
fuente
Prueba esto:
Funciona bastante bien, lo agregará al inicio de la matriz.
fuente