Tengo una función cuya tarea es contar el precio de un producto después de un descuento. Sin embargo, como resultado obtengo objetos sin este valor (totalPrice). ¿Dónde estoy cometiendo un error?
const arrayObj = [ { basePrice: 12, discount: 3, }, { basePrice: 12, discount: 2, }, { basePrice: 8, discount: 2, }, ]; interface Product { basePrice: number; discount: number; totalPrice?: number; } const countTotalPrice = (products: Product[]): Product[] => { const calculateTotalPrice = ( basePrice: number, discount: number, totalPrice?: number ): void => { totalPrice = basePrice - discount; }; products.forEach((product) => calculateTotalPrice( product.basePrice, product.discount, product.totalPrice ) ); return products; }; console.log(countTotalPrice(arrayObj));No está modificando productos en su matriz. Tienes dos opciones:
products.forEach y pase una función que modifique un producto. Devolver productos modificados.products.map y pase una función que toma un producto y crea un nuevo objeto con propiedad adicional, devuelve el resultado del mapeo.Yo diría que el segundo enfoque es más idiomático en JS/TS.
const countTotalPrice = (products: Product[]): Product[] => { return products.map((product) => ({ // the parentheses are necessary in this position // we want object literal, not code block ...product, totalPrice: product.basePrice - product.discount }) ); }prueba esto
const countTotalPrice = (products: Product[]): Product[] => { const calculateTotalPrice = ( p:Product ): void => { p.totalPrice = p.basePrice -p. discount; }; products.forEach((product) => calculateTotalPrice( product ) ); return products; };Puede usar Array.prototype.map() combinado con la asignación de desestructuración :
interface Product { basePrice: number; discount: number; totalPrice?: number; } const arrayObj: Product[] = [{ basePrice: 12, discount: 3 },{ basePrice: 12, discount: 2 },{ basePrice: 8, discount: 2 },]; const countTotalPrice = (products: Product[]): Product[] => products.map((p) => ({ ...p, totalPrice: p.basePrice - p.discount, }));Ejemplo de código sin TypeScript:
const arrayObj = [{basePrice: 12,discount: 3,},{basePrice: 12,discount: 2,},{basePrice: 8,discount: 2,},] const countTotalPrice = (products) => products.map((p) => ({ ...p, totalPrice: p.basePrice - p.discount, })) console.log(countTotalPrice(arrayObj))