function Carts() { let cartEval = []; const cartData = useSelector((state) => state.cartProducts); cartEval = cartData.map((item) => evalCart(item)); function evalCart(a) { if (cartEval.find((b) => b.id == a.id)) { return { ...b, numOfTimes: numOfTimes + 1 }; } else { return { id: a.id, numOfTimes: 1, prodTitle: a.title, price: a.price, }; } } const totalPrice = cartData .map((item) => item.price) .reduce((x, y) => x + y, 0); function cartRender({ item }) { return ( <View> <View> <View> <Text>{item.numOfTimes}</Text> <Text>{item.prodTitle}</Text> <Text>{item.price}</Text> <Text>Delete Button</Text> </View> </View> </View> ); } return ( <View> <View> <Text>Total Sum of Items:{totalPrice}</Text> </View> <FlatList data={cartEval} renderItem={cartRender} /> </View> ); } const styles = StyleSheet.create({}); export default Carts;
Esto es lo que quiero lograr:
Necesito la función evalCart(a)
para comprobar si el item.id
existe en cartEval
. Si existe la id
, aumente item.nuofItems
en 1. Si no existe, cree un nuevo artículo con la id
en la matriz cartEval.
Pero cada vez que se llama a la función, devuelve falso, por lo tanto, la primera parte de la instrucción if
nunca se ejecuta. solo la else
parte. ¿Qué estoy haciendo mal?
Finalmente pude resolver el rompecabezas. Esta es mi solución a continuación.
function Carts() { let cartEval = []; const cartData = useSelector((state) => state.cartProducts); cartData.map((item) => evalCart(item)); function evalCart(a) { if (cartEval.find((b) => b.id == a.id)) { const dummy = cartEval.filter((d) => d.id == a.id)[0]; cartEval.splice(cartEval.indexOf(dummy), 1, { ...dummy, numOfTimes: dummy.numOfTimes + 1, }); } else { cartEval.push({ id: a.id, numOfTimes: 1, prodTitle: a.title, price: a.price, }); } } const totalPrice = cartData .map((item) => item.price) .reduce((x, y) => x + y, 0); function cartRender({ item }) { return ( <View> <View> <View> <Text>{item.numOfTimes}</Text> <Text>{item.prodTitle}</Text> <Text>{item.price}</Text> <Text>Delete Button</Text> </View> </View> </View> ); } return ( <View> <View> <Text>Total Sum of Items:{totalPrice}</Text> </View> <FlatList data={cartEval} renderItem={cartRender} /> </View> ); } const styles = StyleSheet.create({}); export default Carts;
gracias por tus aportes