Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Jquery Array Ajuda

Tenho o seguinte array com os seus objetos :

Visualização console.log:

(2) [{…}, {…}]
0: 
   000011:
        item:Array(0)
1:  
 000010: 
        item:Array(0) 

Visualização no json :

[{"000011":{"item":[]}},{"000010":{"item":[]}}]

Preciso adicionar objetos

var item = { 
                nome: nome,
                quantidade: quantidade,
                foto: foto
            };

dentro do array item, porém tenho que adicionar automaticamente, sem saber o índice dos mesmo, nem mesmo o índice do código do carrinho ("000010").Preciso adicionar apenas sabendo o código do carrinho. Já tentei dar um foreach e pegar o determinado elemento:

var carrinhoid = "000010"; 
var carrinhos = É uma variável que eu salvo o array ;

carrinhos.foreach(function (data) {
     data[carrinhoid].item.push("Algum objeto");
});

Tentei também usando o .map :

var check = $.map(carrinhos, function (e) {
           return e[carrinhoid];
 });
 check.push("algum objeto");

Este exemplo de cima até deu certo porém, quando dou o push ele está adicionando o objeto apenas na variável check e não no array como todo .

OBS: O exemplo acima é só para ter uma noção da lógica !

Também tentei usar o .filter para pegar o carrinhoid e colocar o item dentro mas não da certo !

Alguma solução ? Desde já agradeço !

6 respostas
solução!

Olá Bruno,

De acordo com o seu json, você consegue adicionar dados dentro do array de item, da seguinte forma:


var carrinhoId = "000010"; 
var carrinhos = [{"000011":{"item":[]}},{"000010":{"item":[]}}];

var item = {  
    "nome": "nome",
    "quantidade": "quantidade",
    "foto": "foto"
};

carrinhos.forEach(function (carrinho) {
    var idDoCarrinho = Object.keys(carrinho)[0];
    var itemDoCarrinho = Object.values(carrinho)[0].item;

    if(idDoCarrinho === carrinhoId)
        itemDoCarrinho.push(item);
});

Uma dica seria você deixar o json de carrinhos da seguinte forma:

[{"id": "000011", "item": []},{"id": "000010", "item": []}]


var carrinhoId = "000010"; 
var carrinhos = [{"id": "000011", "item": []},{"id": "000010", "item": []}];

var item = {  
    "nome": "nome",
    "quantidade": "quantidade",
    "foto": "foto"
};

carrinhos.forEach(function (carrinho) {
    if(carrinho.id === carrinhoId)
        carrinho.item.push(item);
});

Funcionou aqui , teria como me mostrar como faço também para apagar e editar os itens,usando o esquema do primeiro método ?

Para apagar você pode resetar array do item, da seguinte forma:

itemDoCarrinho.splice(0);

E para editar:

itemDoCarrinho[0].nome = "nome editado";

Estou tentando fazer uma pequena verificação para ver se o item do carrinho existe usando a mesma sintaxe que você disse para editar :

if(itemDoCarrinho[0].nome = "nome do item"){
   console.log("Já existe esse item ");
}else{
  console.log("Não existe esse item");
}

Porém quando eu uso a chave [0] eu pego o primeiro item do array. Sabe como eu resolvo esse problema ?

Obs: Ele está dentro do foreach !

Pra resolver é preciso que você percorra os itens de dentro do carrinho e depois faça a verificação desejada:


if(idDoCarrinho === carrinhoId) {
    itemDoCarrinho.forEach(function(item){
        if(item.nome === 'nome2') 
            console.log("Já existe esse item");
    });
}

Show , Muito obrigado pela ajuda !

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software