• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

133
Vistas
Obtenga el total de una matriz elegida en ES6

Quería obtener el precio total del productPrice de la matriz de chosenData . Necesito compararlo desde mainData y solo obtener su valor total. Mi problema es que me estoy volviendo indefinido y ¿cómo debo hacerlo y hay una forma más corta de hacerlo?

 const mainData = [ { "id": "4324", "productName": "Apple", "productPrice": 250, }, { "id": "656546b", "productName": "Banana", "productPrice": 500, }, { "id": "5656", "productName": "Soup", "productPrice": 800, } ]; const chosenData = ['5656', '656546b'] const newArray = chosenData.map((value, index) => ({ productPrice: mainData.find((data) => data.id === value) })) console.log(newArray.productPrice)

over 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En su solución, newArray obtenido a través del mapa es una matriz, y la matriz no tiene el atributo productPrice , por lo tanto, no está definido.

Puede filtrar el objeto con una identificación coincidente y luego resumirlos, por ejemplo:

 mainData.filter(value=>chosenData.includes(value.id)).reduce((acc, cur)=>acc+cur.productPrice, 0)
over 3 years ago · Juan Pablo Isaza Denunciar

0

map devuelve una nueva matriz y no omite ningún elemento. Puede usar reduce y dentro de la devolución de llamada reduce, use find . Si se encuentra un elemento con la misma identificación en maindData, devolverá el objeto sin definir. Si no está indefinido, obtenga el valor y acumule.

 const mainData = [{ "id": "4324", "productName": "Apple", "productPrice": 250, }, { "id": "656546b", "productName": "Banana", "productPrice": 500, }, { "id": "5656", "productName": "Soup", "productPrice": 800, } ]; const chosenData = ['5656', '656546b'] const newArray = chosenData.reduce((acc, curr) => { const findById = mainData.find(item => item.id === curr); findById && (acc += findById.productPrice) return acc; }, 0) console.log(newArray)

over 3 years ago · Juan Pablo Isaza Denunciar

0

Su newArray es una matriz. No puede acceder a su propiedad como newArray.productPrice . Desea calcular un valor de su newArray, por lo que puede usar reduce() . Desarrollando su código

 const mainData = [ { "id": "4324", "productName": "Apple", "productPrice": 250, }, { "id": "656546b", "productName": "Banana", "productPrice": 500, }, { "id": "5656", "productName": "Soup", "productPrice": 800, } ]; const chosenData = ['5656', '656546b'] const newSum = chosenData.map((value, index) => ({ productPrice: mainData.find((data) => data.id === value) })).reduce((agg,x) => { return agg + x.productPrice.productPrice },0); console.log(newSum)

Si no quieres complicarte con demasiadas propiedades puedes usar este código:

 const mainData = [ { "id": "4324", "productName": "Apple", "productPrice": 250, }, { "id": "656546b", "productName": "Banana", "productPrice": 500, }, { "id": "5656", "productName": "Soup", "productPrice": 800, } ]; const chosenData = ['5656', '656546b'] const newSum = chosenData.map((value, index) => mainData.find((data) => data.id === value).productPrice).reduce((agg,x) => agg + x,0); console.log(newSum)

over 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda