Each always returns the last term of a JQUERY table

1

I have the following code that traverses a table that contains data, but I'm not sure why it always returns the last item when I hedge an object. It does not return the other items.

Code:

$('.btn-finalizar-pedido').click(function () {

  //sessionStorage.removeItem('dadosproduto');

  let objeto_1 = [];
  let obj_1 = new Object();

  var produtosArray1 = "";
  var id_produto_selecionado = "";
  var nome_produto_selecionado = "";
  var comprimento_produto_selecionado = "";
  var largura_produto_selecionado = "";
  var espessura_produto_selecionado = "";
  var quantidade_produto_selecionado = "";
  var preco_produto_selecionado = "";
  var novo_preco_produto_selecionado = "";

  $('.tabela-produtos .produtos-tabela tr').each(function()
  {
    id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
    nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
    comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
    largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
    espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
    quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
    preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
    novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

    obj_1.id_produto = id_produto_selecionado;
    obj_1.quantidade = quantidade_produto_selecionado;
    obj_1.comprimento = comprimento_produto_selecionado;
    obj_1.largura = largura_produto_selecionado;
    obj_1.espessura = espessura_produto_selecionado;
    obj_1.novo_preco = novo_preco_produto_selecionado;
    obj_1.preco_produto = preco_produto_selecionado;
    obj_1.nome = nome_produto_selecionado;

    objeto_1.push(obj_1);

    produtosArray1 = JSON.stringify(objeto_1);
    console.log(produtosArray1);
    sessionStorage.setItem('dados', produtosArray1);
  });
});

I tried this way:

  let objeto_1 = [];
  let obj_1 = new Object();

   $('.btn-finalizar-pedido').click(function () {

   var produtosArray1 = "";
   var id_produto_selecionado = "";
   var nome_produto_selecionado = "";
   var comprimento_produto_selecionado = "";
   var largura_produto_selecionado = "";
   var espessura_produto_selecionado = "";
   var quantidade_produto_selecionado = "";
   var preco_produto_selecionado = "";
   var novo_preco_produto_selecionado = "";

   $('.tabela-produtos .produtos-tabela tr').each(function()
   {
id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

obj_1.id_produto = id_produto_selecionado;
obj_1.quantidade = quantidade_produto_selecionado;
obj_1.comprimento = comprimento_produto_selecionado;
obj_1.largura = largura_produto_selecionado;
obj_1.espessura = espessura_produto_selecionado;
obj_1.novo_preco = novo_preco_produto_selecionado;
obj_1.preco_produto = preco_produto_selecionado;
obj_1.nome = nome_produto_selecionado;

objeto_1.push(obj_1);

  produtosArray1 = JSON.stringify(objeto_1);
  sessionStorage.setItem('dadosproduto', produtosArray1);
  });

 });

It also did not work very well. What's wrong with the code?

    
asked by anonymous 04.12.2017 / 18:30

1 answer

0

The solution is to put let obj_1 = new Object(); inside the loop so that every loop is re-created, otherwise JavaScript understands that the object is the same and overwrites the array with the last value past.

The code looks like this:

$('.btn-finalizar-pedido').click(function () {

  //sessionStorage.removeItem('dadosproduto');

  let objeto_1 = [];

  var produtosArray1 = "";
  var id_produto_selecionado = "";
  var nome_produto_selecionado = "";
  var comprimento_produto_selecionado = "";
  var largura_produto_selecionado = "";
  var espessura_produto_selecionado = "";
  var quantidade_produto_selecionado = "";
  var preco_produto_selecionado = "";
  var novo_preco_produto_selecionado = "";

  $('.tabela-produtos .produtos-tabela tr').each(function()
  {

    let obj_1 = new Object();

    id_produto_selecionado = $(this).find('.prod_id_selecionado').text();
    nome_produto_selecionado = $(this).find('.prod_nome_selecionado').text();
    comprimento_produto_selecionado = $(this).find('.prod_comprimento_selecionado').text();
    largura_produto_selecionado = $(this).find('.prod_largura_selecionado').text();
    espessura_produto_selecionado = $(this).find('.prod_espessura_selecionado').text();
    quantidade_produto_selecionado = $(this).find('.prod_quantidade_selecionado').text();
    preco_produto_selecionado = $(this).find('.prod_preco_selecionado').text();
    novo_preco_produto_selecionado = $(this).find('.prod_novo_preco_selecionado').text();

    obj_1.id_produto = id_produto_selecionado;
    obj_1.quantidade = quantidade_produto_selecionado;
    obj_1.comprimento = comprimento_produto_selecionado;
    obj_1.largura = largura_produto_selecionado;
    obj_1.espessura = espessura_produto_selecionado;
    obj_1.novo_preco = novo_preco_produto_selecionado;
    obj_1.preco_produto = preco_produto_selecionado;
    obj_1.nome = nome_produto_selecionado;

    objeto_1.push(obj_1);

    produtosArray1 = JSON.stringify(objeto_1);
    console.log(produtosArray1);
    sessionStorage.setItem('dados', produtosArray1);
  });
});
    
04.12.2017 / 19:28