Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

268
Vistas
Cómo agregar un artículo al carrito

Realmente no entiendo esta función, ¿qué hace realmente " cartItems.push(...product, count:1) "? Soy un principiante y es difícil para mí entender esta lógica. ¡Sería amable de ustedes ayudarme a explicar! ¡Muchas gracias!

 addToCart = (product) => { let alreadyIncart = false; const cartItems = this.state.cartItems.slice() cartItems.forEach((item) => { if(item.id===product.id){ item++; alreadyIncart = true; } if(!alreadyIncart){ cartItems.push(...product, count:1) } }) }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí hay un desglose, paso a paso.

 addToCart = (product) => { // Sets boolean value if item is in cart initially to false, not found let alreadyIncart = false; // slice creates a shallow copy of the cartItems array const cartItems = this.state.cartItems.slice(); // Iterate the cartItems copy, calling a function for each element cartItems.forEach((item) => { // if there is a matching item id if (item.id === product.id) { // increment item count item++; // set found to true alreadyIncart = true; } // if item was not found in cart, // add it to the cartItems array with an initial count value if (!alreadyIncart) { cartItems.push(...product, count:1) } }) }

Sin embargo, parece haber algunos problemas con el código.

  1. item++ está mutando el objeto del item existente. En general, se deben evitar mutaciones como esta. Tampoco es válido ya item es un objeto. Debería actualizar la propiedad de count , es decir, item.count++ , o más bien, count: item.count + 1 en una nueva referencia de objeto.
  2. cartItems.push(...product, count:1) es sintácticamente incorrecto, debe ser un solo objeto, es decir, cartItems.push({ ...product, count: 1 }) .

Una versión más correcta devolvería una nueva matriz con valores actualizados y no mutaría ningún argumento pasado.

 addToCart = (product) => { const { cartItems } = this.state; // check if product is already in cart const isInCart = cartItems.some(item => item.id === product.id); if (isInCart) { // if already in cart, return shallow copy array // and shallow copy the matching item, then update // the count by 1 return cartItems.map(item => item.id === product.id ? { ...item, count: item.count + 1 } : item); // just return non-match } else { // Not in cart, just create item object with initial count 1 // concat appends to and returns a new array return cartItems.concat({ ...product, count: 1, }); } }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda