Esta es mi respuesta, cuidado con los spoilers!!
.
.
.
.
.
.
.
.
.
.
.
.
exportfunctionprocessShoppingList(list){let total =0;let newList = list.map(item=>{if(item.name.includes("oferta")){ item.price= item.price*0.8;} item.price= item.price* item.quantity; total += item.price;let{ quantity,...auxItem }= item;return auxItem;})Object.assign(list, newList);return total;}
Sin spoilers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Solución… 😄
.
Para empezar, creamos una lista modificada donde al recorrer 'list' con map() verificamos si el elemento incluye la palabra "oferta".
.
Entonces al precio se le aplicará el descuento del 20%, y retornamos los objetos con las propiedades 'name' y 'price'; este último le asignamos el valor descontado previamente, ahora multiplicado por la cantidad.
.
En una variable total acumulamos el precio total. Finalmente pasamos los valores de la lista modificada a la lista original utilizando Object.assign(). Retornamos el total.
.
exportfunctionprocessShoppingList(list){var total =0;for(var i =0; i < list.length; i++){ list[i].price= list[i].price* list[i].quantity;if(list[i].name.split(" ").includes("oferta")){ list[i].price= list[i].price-(list[i].price*20/100);}delete list[i].quantity; total += list[i].price}return total;}
.
Por alguna razón en obj1 la propiedad 'quantity' se elimina después de aplicar Object.assign().
.
Pero en realidad debería mantenerse intacta dicha propiedad, como en este otro ejemplo:
.
exportconstprocessShoppingList=(list)=>{let total =0;for(let item of list){ item.price= item.name.includes('oferta')? item.price-(item.price*0.20): item.price; item.price= item.price* item.quantity;delete item.quantity; total = total + item.price;}return total;}