Eu preciso preencher um arquivo json, agora tenho algo parecido com isto:
{"element":{"id":10,"quantity":1}}
E eu preciso adicionar outro "elemento". Meu primeiro passo é colocar esse json em um tipo de objeto usando cart = JSON.parse
, agora eu preciso adicionar o novo elemento. Eu deveria usar cart.push
para adicionar outro elemento, tentei o seguinte:
var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);
Mas recebi o erro "O objeto não tem método de envio" quando tento fazer element.push
, e acho que estou fazendo algo MUITO errado, porque não estou dizendo o "elemento" em lugar algum.
Como eu posso fazer isso?
Edit: desculpe a todos, eu tinha muita confusão na minha cabeça.
Eu pensei que poderia obter apenas o tipo de objeto ao obter dados JSON.parse
, mas recebo o que coloquei no JSON em primeiro lugar.
Colocar array em vez de objeto resolveu meu problema, usei muitas sugestões aqui também, obrigado a todos!
fonte
Respostas:
Seu elemento não é uma matriz, no entanto, seu carrinho precisa ser uma matriz para suportar muitos objetos de elemento. Exemplo de código:
Se você deseja que o carrinho seja uma matriz de objetos no formulário
{ element: { id: 10, quantity: 1} }
, execute:JSON.stringify()
foi mencionado como uma preocupação no comentário:fonte
Com essa linha
você define
element
como um objeto simples. O objeto JavaScript nativo não possuipush()
método. Para adicionar novos itens a um objeto simples, use esta sintaxe:Por outro lado, você pode definir
element
como uma matriz usandoEntão você pode adicionar elementos usando
push()
.fonte
element[ yourKey ] = yourValue;
é a melhor maneira de adicionar um elemento a um objeto.element[ yourkey ] = [ element{yourkey], yourNewValue ];
Se o carrinho tiver que ser armazenado como um objeto e não como uma matriz (embora eu recomendo armazenar como um []), você sempre poderá alterar a estrutura para usar o ID como chave:
Isso permite que você adicione vários itens ao carrinho da seguinte maneira:
fonte
Para acrescentar a um objeto, use
Object.assign
Resultado:
fonte
element
, portanto, ele terá apenas o último elemento.você deve escrever
var element = [];
em javascript
{}
é um objeto vazio e[]
é uma matriz vazia.fonte
fonte
Eu estava lendo algo relacionado a essa tentativa, se for útil.
1. Defina uma função push dentro de um objeto.
Agora você pode enviar elementos como uma matriz
Isso produzirá esse objeto
Observe que os elementos são adicionados com índices e também observe que há uma nova propriedade de comprimento adicionada ao objeto. Isso também será útil para encontrar o comprimento do objeto. Isso funciona devido à natureza genérica da
push()
funçãofonte
este código é trabalhado.
fonte
Tente o seguinte:
fonte
Adicionando novos elementos de chave / par ao objeto original:
obj novo valor:
fonte
Se alguém procura criar um JSON semelhante, apenas sem usar
cart
como uma matriz, aqui vai:Eu tenho uma matriz de objetos
myArr
como:e tentarei criar um JSON com a seguinte estrutura:
você pode simplesmente fazer
fonte
cart[key]=value
basicamente um mapa de valores-chave. Voto positivo se a resposta foi útil. Obrigado!Para quem ainda procura uma solução, acho que os objetos deveriam ter sido armazenados em uma matriz como ...
Então, quando você quiser usar um elemento como objeto, poderá fazer isso ...
Coloque uma variável em "id_that_we_want" e forneça o ID do elemento que queremos da nossa matriz. Um objeto "elemnt" é retornado. É claro que não precisamos nos identificar para encontrar o objeto. Poderíamos usar qualquer outra propriedade para fazer a descoberta.
fonte
OU:
fonte
push é um método de matrizes, portanto, para objeto, você pode obter o índice do último elemento e provavelmente pode fazer o mesmo trabalho que push para objeto, conforme abaixo
Em seguida, adicione o objeto ao novo índice do elemento
fonte
se você não deseja fazer loop em JS, por exemplo, passe para PHP para fazer loop para você
esse conceito pode ajudar um pouco
fonte
Essa é uma pergunta antiga. Hoje, a melhor prática é usar Object.defineProperty
fonte