Playground - agrupa los productos
Clase 43 de 99 • 30 días de JavaScript
Contenido del curso
Clase 43 de 99 • 30 días de JavaScript
Contenido del curso
Benjamin Rodriguez
Pablo Torres Pérez
Iván Ceballos Vega
willmar fernando romero marin
Mauricio Gualteros
david alvarez
Fabrizio López
Alejandro Anaya
Jesús Emiliano Alonso López
Joan Alexander Valerio Rodríguez
Manufactura Bancor
Andrés Soret Chacin
Christopher Armando Jiménez Valverde
Andre Huaman Yovera
Andres Felipe Torres
Harrison Steve Pinzón Neira
David Ochoa
Angel Ramírez
Pablo Perez
Pariksit Erikrsnan Ortiz Flores
Christian Ricardo Conchari Cabrera
Rubén Hernández Hernández
🛡️Escudo anti-spoilers🛡️
Mi solucion:
export function groupProducts(products, category) { const res = {} //Productos que cumple con la categoria const category_products = products.filter(x => x.category == category) res['products'] = category_products.map(x => x.name).join(", ") res['totalPrice'] = category_products.reduce(((acum, { price }) => acum + price), 0) return res }
Con ayuda de la programación funcional y el curso de manejo de arrays de NicoBytes.
export function groupProducts(products, category) { // Filtrar los produtos const products1 = products.filter(prod => prod.category === category); // Nombre de los productos separados por comas en orden const prodName = products1.map(prod => prod.name).join(', '); // Suma de los precios de productos de la categoría const sumPrices = products1.map(prod => prod.price).reduce((sum, curr) => sum + curr); return { products: prodName, totalPrice: sumPrices } }
Puedes acceder directamente a la propiedad sin tener que iterar para extraer la propiedad primero:
const sumPrices = products1.reduce((sum, curr) => sum + curr.price);
o estoy aprendiendo o este estaba fácil
solucion
export function groupProducts(products, category) { let arrayFilter = {}; let acountPrice = 0; let acountName = []; products.forEach(element => { if (element.category === category) { //console.log(element); acountName.push(element.name); acountPrice += element.price; } }); arrayFilter.products = acountName.join(", "); arrayFilter.totalPrice = acountPrice; return arrayFilter; }
export function groupProducts(products, category) { let names = []; let sum = 0; products.forEach(product => { if (product.category === category) { names.push(product.name); sum += product.price; } }); return { products: names.join(", "), totalPrice: sum } }
Creo que esta es la solución más eficiente, ya que itera el array una sola vez (o 2 si tomamos en cuenta el join).
La solución que hice yo (y la mayoría) utiliza las propiedades filter y reduce recorre el array completo una vez, luego el array filtrado y luego vuelve a recorrer el filtrado por el join.
🛡️🛡️Escudo anti-spoilers🛡️🛡️
Mi solución al reto
export function groupProducts(products, category) { let groupProducts = ""; let totalPrice = 0; for (let product of products) { if (category === product.category) { groupProducts += (groupProducts.length > 0) ? `, ${product.name}` : `${product.name}`; totalPrice += product.price } } return { products: groupProducts, totalPrice: totalPrice } }
🛡️Escudo anti-spoilers🛡️
tal vez está poco entendible pero ahi esta, si alguien tiene duda se lo puedo explicar
export function groupProducts(products, category) { // Tu código aquí return { products: products.filter(obj => obj.category === category) .map(obj => obj.name).join(", "), totalPrice: products.filter(obj => obj.category === category) .map(obj => obj.price) .reduce((acc, cur) => acc + cur, 0), }; }
Escudo anti-spoilers 🛡️
Mi solución:
Con todo lo aprendido hasta el momento
function groupProducts(products, category) { const group = products.filter( product => product.category.includes( category ) ) const names = group.map( product => product.name ) const totalPrice = group.reduce((accum, product) => accum + product.price, 0) return { products: names.join(", "), totalPrice } }
My solution 👇
function groupProducts(products, category) { const categorizedProducts = products.filter(product => product["category"] === category); const productNames = []; let totalPrice = 0; for (let i = 0; i < categorizedProducts.length; i++) { const { name, price } = categorizedProducts[i]; productNames.push(name); totalPrice += price; } return { products: productNames.join(", "), totalPrice } } ```function groupProducts(products, category) { const categorizedProducts = products.filter(product => product\["category"] === category); const productNames = \[]; let totalPrice = 0; for (let i = 0; i < categorizedProducts.length; i++) { const { name, price } = categorizedProducts\[i]; productNames.push(name); totalPrice += price; } return { products: productNames.join(", "), totalPrice }}
Les comparto mi solucion.
export function groupProducts(products, category) { const newProduct = { products: "", totalPrice: 0, }; const filtroProducts = products.filter(product => product.category === category); const filtroNames = filtroProducts.map(product => product.name); const namesProducts = filtroNames.join(", "); newProduct.products = namesProducts; const filtroPrice = filtroProducts.map(product => product.price) const sumaPrice = filtroPrice.reduce((acumulador, price) => acumulador + price); newProduct.totalPrice = sumaPrice; return newProduct; } ```function groupProducts(products, category) { const newProduct = { products: "", totalPrice: 0, }; const filtroProducts = products.filter(product => product.category === category); const filtroNames = filtroProducts.map(product => product.name); const namesProducts = filtroNames.join(", "); newProduct.products = namesProducts; const filtroPrice = filtroProducts.map(product => product.price) const sumaPrice = filtroPrice.reduce((acumulador, price) => acumulador + price); newProduct.totalPrice = sumaPrice; return newProduct;}
export function groupProducts(products, category) { const filteredProducts = products.filter(product => product.category === category); const productNames = filteredProducts.map(product => product.name).join(", "); const totalPrice = filteredProducts.reduce((sum, product) => sum + product.price, 0); return { products: productNames, totalPrice: totalPrice, }; }
🛡️Escudo anti-spoilers🛡️ . . . . . . . . . .
export function groupProducts(products, category) { // Tu código aquí console.log(category); if (category) { const filteredProducts = products.filter((product) => product.category === category); console.log(filteredProducts); let productResult = filteredProducts.reduce((acum, product) => (acum + product.name + ', '), ''); return { products: productResult.slice(0, -2), totalPrice: filteredProducts.reduce((acum, product) => (acum + product.price), 0) } } }
Solución! :D
🛡️🛡️🛡️Escudo anti spoilers🛡️🛡️🛡️
Agrupa los productos
!Spoiler Shield
export function groupProducts(products, category) { // Tu código aquí let totalPrice = 0; let productsName = []; products.forEach((element) => { if (element.category == category) { totalPrice += element.price; productsName.push(element.name); } }); return { products: productsName.join(", "), totalPrice }; }
Mi solución
function groupProducts(products, category) { const bill = { products, totalPrice: 0 } const productNames = [] const productsByCategory = products.filter(product => product.category === category); productsByCategory.forEach(product => productNames.push(product.name)); bill.products = productNames.join(', '); bill.totalPrice = productsByCategory.reduce((a, b) => a.price + b.price) return bill; }
export function groupProducts(products, category) { const productFilteredData = products .filter(p => p.category === category) .map(p => ({ name: p.name, price: p.price })) return { products: productFilteredData.map(p => p.name).join(', '), totalPrice: productFilteredData.reduce((acc, item) => acc + item.price, 0) } }
export function groupProducts(products, category) { // Tu código aquí let productByCategory = products.filter(product => product.category === category); let productNames = products.map(product => product.name).join(', '); let totalPrice = product.map(product => product.price).reduce((previusValue, currentValue) => previusValue + currentValue); let result = { products: productNames, totalPrice = totalPrice } return result; }
Comparto mi solución:
. . . . . . . . . . . . .
export function groupProducts(products, category) { // Tu código aquí const result = {}; const targetCategory = products.filter(function (product) { return product.category === category; }); result.products = targetCategory.map(product => product.name).join(", "); result.totalPrice = targetCategory.reduce(((acum, { price }) => acum + price), 0) return result; }
Mi solución 💚
export function groupProducts(products, category) { let filteredProducts = products.filter((product) => product.category === category) return { products: filteredProducts.map((product) => product.name).join(', '), totalPrice: filteredProducts.reduce((total, actualProduct) => total + actualProduct.price, 0) } }