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

213
Vistas
Necesito eliminar productos duplicados en una matriz y sumar su cantidad en JavaScript

En el programa, busco conjuntos de productos de pedidos a través de API. La matriz contiene una lista con productos que están duplicados. Necesito eliminar los productos duplicados en la matriz y sumar sus cantidades.

Así es como se ve la matriz que obtengo:

 const productsAll = [ { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 1, }, { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 3, }, { name: 'Product 2', ean: '1112223334446', sku: '4446', product_id: '60404533', quantity: 2, }, { name: 'Product 3', ean: '1112223334447', sku: '4447', product_id: '30504512', quantity: 8, }, ];

Quiero que se vea así después de eliminar los duplicados y sumar las cantidades:

Se reduce el producto 1 y se suma la cantidad

 [ { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 4, }, { name: 'Product 2', ean: '1112223334446', sku: '4446', product_id: '60404533', quantity: 2, }, { name: 'Product 3', ean: '1112223334447', sku: '4447', product_id: '30504512', quantity: 8, }, ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede probar el siguiente enfoque para lograr esto. Cree un objeto ( productsCheck en mi caso) y recorra la matriz productsAll . Si el nombre ya existe en el objeto, agregue la cantidad, de lo contrario, simplemente agregue el producto a su objeto (es decir productsCheck )

Código de trabajo:

 const productsAll = [{ name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 1, }, { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 3, }, { name: 'Product 2', ean: '1112223334446', sku: '4446', product_id: '60404533', quantity: 2, }, { name: 'Product 3', ean: '1112223334447', sku: '4447', product_id: '30504512', quantity: 8, }, ]; const productsCheck = {} productsAll.forEach(product => { if (product.name in productsCheck) { productsCheck[product.name].quantity += product.quantity } else { productsCheck[product.name] = product } }) console.log(productsCheck)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Sugeriría usar Array.reduce() para crear un mapa de cantidades para cada producto, productQuantities , mientras elimina los duplicados.

Estoy usando product_id para la clave única, uno podría usar otro si corresponde.

También sumaríamos la cantidad total en este bucle.

 const productsAll = [ { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 1, }, { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 3, }, { name: 'Product 2', ean: '1112223334446', sku: '4446', product_id: '60404533', quantity: 2, }, { name: 'Product 3', ean: '1112223334447', sku: '4447', product_id: '30504512', quantity: 8, }, ]; const productQuantities = productsAll.reduce((acc, el) => { const uniqueKey = el.product_id; if (!acc[uniqueKey]) { acc[uniqueKey] = { name: el.name, quantity: el.quantity }; acc.totalQuantity = (acc.totalQuantity || 0) + el.quantity; } return acc; }, {}) console.log('Product quantities:', productQuantities); console.log('Total quantity:', productQuantities.totalQuantity)
 .as-console-wrapper { max-height: 100% !important; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba esta lógica simple

 const productsAll = [{ name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 1,}, { name: 'Product 1', ean: '1112223334445', sku: '4445', product_id: '70604566', quantity: 3, }, { name: 'Product 2', ean: '1112223334446', sku: '4446', product_id: '60404533', quantity: 2, }, { name: 'Product 3', ean: '1112223334447', sku: '4447', product_id: '30504512', quantity: 8, }, ]; const products = {}; const reducedProducts = []; productsAll.forEach((prd,idx) => { if (products[prd.product_id]) { prd.quantity += products[prd.product_id].quantity; products[prd.product_id].quantit = prd.quantity; reducedProducts[products[prd.product_id].index] = prd; } else { products[prd.product_id] = {index:idx,quantity:prd.quantity}; reducedProducts.push(prd) } }) console.log(reducedProducts)

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