Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

86
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda