Eu tenho um objeto que contém alertas e algumas informações sobre eles:
var alerts = {
1: { app: 'helloworld', message: 'message' },
2: { app: 'helloagain', message: 'another message' }
}
Além disso, tenho uma variável que diz quantos alertas existem alertNo
,. Minha pergunta é: quando vou adicionar um novo alerta, existe uma maneira de anexar o alerta ao alerts
objeto?
javascript
Steve Gattuso
fonte
fonte
Respostas:
Que tal armazenar os alertas como registros em uma matriz em vez de propriedades de um único objeto?
E para adicionar um, basta usar
push
:fonte
alerts[3] = { app: 'hello3', message: 'message 3' }
. Com isso, você pode acessar uma mensagem por id:alerts[2] => { app: 'helloworld', message: 'message' }
. Obtendo o comprimento é então apenas:Object.keys(alerts).length
(que pouco é mais fácil com matrizes)O jQuery
$.extend(obj1, obj2)
mesclaria 2 objetos para você, mas você realmente deveria estar usando uma matriz.fonte
Você pode fazer isso com Object.assign () . Às vezes, você precisa de uma matriz, mas ao trabalhar com funções que esperam um único objeto JSON - como uma chamada OData -, achei esse método mais simples do que criar uma matriz apenas para descompactá-lo.
EDIT: Para endereçar o comentário sobre a obtenção da próxima chave, você pode obter uma matriz de chaves com a função Object.keys () - consulte a resposta de Vadi para obter um exemplo de incremento da chave. Da mesma forma, você pode obter todos os valores com Object.values () e pares de valores-chave com Object.entries () .
fonte
Como outras respostas apontadas, você pode achar mais fácil trabalhar com uma matriz.
Se não:
tente:
https://jsbin.com/yogimo/edit?js,console
fonte
while(alerts[size]) size++;
E provavelmente renomearsize
paranewId
.Você pode usar a sintaxe de propagação da seguinte maneira.
fonte
Agora, com o ES6, temos um operador de propagação muito poderoso (... Objeto), que pode facilitar esse trabalho. Isso pode ser feito da seguinte maneira:
É isso aí. Ele adicionará a chave que você deseja. Espero que isto ajude!!
fonte
Você realmente deve seguir a série de sugestões de alertas, mas, caso contrário, adicionar ao objeto que você mencionou ficaria assim:
Mas como você não deve usar números literais, os nomes citam tudo e seguem com
ou você pode criar uma variedade de objetos.
Acessar parece
fonte
Você tem a capacidade de alterar a estrutura mais externa para uma matriz? Então ficaria assim
Então, quando você precisava adicionar um, basta colocá-lo no array
Você tem um índice interno baseado em zero para saber como os erros são enumerados.
fonte
Muito mais fácil com o ES6:
fonte
Como alternativa, no ES6, a sintaxe de propagação pode ser usada.
${Object.keys(alerts).length + 1}
retorna em seguidaid
para alerta.fonte
Sinto muito, mas não posso comentar suas respostas já devido à minha reputação! ... então, se você quiser modificar a estrutura do seu objeto, deve fazê-lo que Thane Plummer diz, mas um pequeno truque se você não se importa onde para colocar o item: ele será inserido na primeira posição se você não especificar o número da inserção.
Isso é maravilhoso se você deseja passar um objeto Json, por exemplo, para uma chamada de função do mongoDB e inserir uma nova chave dentro das condições que você recebe. Neste caso, vou inserir um item myUid com algumas informações de uma variável dentro do meu código:
fonte
[Javascript] Depois de um pouco de brincadeira, isso funcionou para mim:
O problema que eu precisava resolver era que eu poderia ter qualquer número de eventos e todos teriam o mesmo nome: LastPostedDateTime, o que é diferente é a data e a hora.
fonte
Tente o seguinte:
Funciona muito bem, ele será adicionado ao início da matriz.
fonte