Hola chicos, actualmente tengo una matriz con algunos datos:
const data = [ {car: 'Hyundai', price: '60.00', tax: '5.00', total: 0}, {car: 'Honda', price: '80.00', tax: '7.00', total: 0}, {car: 'Tesla', price: '100.00', tax: '10.00', total: 0}, ]El conjunto de datos es más grande. ¿Cuál es la mejor manera de obtener una nueva matriz con el total (precio + impuestos) calculado? No quiero mutar original. Así que necesito esto de vuelta:
const newData = [ {car: 'Hyundai', price: '60.00', tax: '5.00', total: 65.00}, {car: 'Honda', price: '80.00', tax: '7.00', total: 87.00}, {car: 'Tesla', price: '100.00', tax: '10.00', total: 110.00}, ]Tengo muchos más campos, así que me preguntaba si había un código más eficiente y más corto para hacerlo que mi solución actual, que es forEach y luego en la clave total, solo hago data.price + data.tax.
Use map() para crear una nueva matriz a partir de la matriz anterior. Use puntos suspensivos para fusionar la nueva propiedad en una copia del objeto anterior.
const data = [ {car: 'Hyundai', price: '60.00', tax: '5.00', total: 0}, {car: 'Honda', price: '80.00', tax: '7.00', total: 0}, {car: 'Tesla', price: '100.00', tax: '10.00', total: 0}, ]; const newData = data.map((car) => ({...car, total: Number(car.price) + Number(car.tax)})); console.log(newData);No sé, Array.forEach es bastante efectivo, pero podrías crear un Array.map() y predefinir una función. P.EJ:
function func(car) { car.total = car.price + car.tax; } let newData = data.map(func);También como un consejo sobre la lógica del código, es posible que desee usar let o var en lugar de const porque es posible la inflación, los cambios de precios y el aumento/disminución de impuestos.