Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

89
Visualizações
necesito ayuda en el fragmento de javascript

A partir del siguiente fragmento, tengo que recorrer todos los recibos, obtener el número de recibo y agregar ese objeto al JSON. Pero obtengo el mismo recibo en dos JSON. ¿Dónde me estoy perdiendo? ¿Alguien puede ayudar? Gracias por adelantado.

 const shopList = []; const shop = { "shopNumber": "2242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopAmount": "100", "shopBank": "HDFC", "shopDetails": { "shopNumber": "1242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopBank": "HDFC", "shopAmount": "100" }, "receiptDetails": [{ "userNumber": "115729", "receiptNumber": "temp1" }, { "userNumber": "115726", "receiptNumber": "temp2" } ] }; shop.receiptDetails.forEach((receipt) => { var temp = shop.shopDetails; temp.receiptNumber = receipt.receiptNumber; shopList.push({ shopNumber: shop.shopNumber, userNumber: Number(receipt.userNumber), receiptNumber: receipt.receiptNumber, shopDetails: temp, isSync: 0 }); }); shopList.forEach((receipt) => { console.log(receipt); });

Estoy obteniendo salida como

 { shopNumber: '2242461', userNumber: 115729, receiptNumber: 'temp1', shopDetails: { shopNumber: '1242461', shopDate: '2020-06-13T00:00:00.000-05:00', shopBank: 'HDFC', shopAmount: '100', receiptNumber: 'temp2' ----**this should be temp1** }, isSync: 0 } { shopNumber: '2242461', userNumber: 115726, receiptNumber: 'temp2', shopDetails: { shopNumber: '1242461', shopDate: '2020-06-13T00:00:00.000-05:00', shopBank: 'HDFC', shopAmount: '100', receiptNumber: 'temp2' }, isSync: 0 }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Estas dos líneas están causando el número de recibo duplicado ya que esencialmente está agregando el mismo objeto JSON a shopList . Solo queda la última actualización.

 var temp = shop.shopDetails; temp.receiptNumber = receipt.receiptNumber;

Te recomiendo que clones shopDetails a los que agregas número de receiptNumber .

 var temp = JSON.parse(JSON.stringify(shop.shopDetails));

Aquí está su código modificado:

 const shopList = []; const shop = { "shopNumber": "2242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopAmount": "100", "shopBank": "HDFC", "shopDetails": { "shopNumber": "1242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopBank": "HDFC", "shopAmount": "100" }, "receiptDetails": [{ "userNumber": "115729", "receiptNumber": "temp1" }, { "userNumber": "115726", "receiptNumber": "temp2" } ] }; shop.receiptDetails.forEach((receipt) => { var temp = JSON.parse(JSON.stringify(shop.shopDetails)); temp.receiptNumber = receipt.receiptNumber; shopList.push({ shopNumber: shop.shopNumber, userNumber: Number(receipt.userNumber), receiptNumber: receipt.receiptNumber, shopDetails: temp, isSync: 0 }); }); shopList.forEach((receipt) => { console.log(receipt); });

about 4 years ago · Juan Pablo Isaza Relatório

0

Eso es porque temp es una referencia a shop.shopDetails . Los objetos en JavaScript se pasan por referencia, cuando asigna temp.receiptNumber , es igual a shop.shopDetails.receiptNumber . Por lo tanto, el valor temp que obtiene en las próximas iteraciones se transfiere de la última iteración.

Lea más sobre cómo funciona la variable de objetos javascript en esta respuesta , creo que lo explica muy bien.

En cuanto a su enfoque, una de las muchas formas en que podría resolverlo es clonar el objeto de shop.shopDetails en cada iteración, por lo tanto, obtendrá un nuevo objeto en su lugar.

P.ej

 const shopList = []; const shop = { "shopNumber": "2242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopAmount": "100", "shopBank": "HDFC", "shopDetails": { "shopNumber": "1242461", "shopDate": "2020-06-13T00:00:00.000-05:00", "shopBank": "HDFC", "shopAmount": "100" }, "receiptDetails": [{ "userNumber": "115729", "receiptNumber": "temp1" }, { "userNumber": "115726", "receiptNumber": "temp2" }] }; shop.receiptDetails.forEach((receipt) => { var temp = {...shop.shopDetails}; // This is to clone an object, there are other ways than this. temp.receiptNumber = receipt.receiptNumber; shopList.push({ shopNumber: shop.shopNumber, userNumber: Number(receipt.userNumber), receiptNumber: receipt.receiptNumber, shopDetails: temp, isSync: 0 }); }); shopList.forEach((receipt) => { console.log(receipt); });

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda