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

243
Vistas
¿Cómo debo escribir estas condiciones para que la función onClick del botón haga lo que quiero con mi matriz?

Tengo una variedad de objetos que es básicamente así.

 const characters = [ { id: 1 name: batman biography: { born-in: gotham good-or-bad: good } stats: { strength: 85 speed: 90 intelligence: 95 } } { id: 2 name: superman biography: { born-in: krypton good-or-bad: good } stats: { strength: 90 speed: 85 intelligence: 80 } } { id: 3 name: joker biography: { born-in: gotham good-or-bad: bad } stats: { strength: 70 speed: 95 intelligence: 100 } } ]

Luego, después de mapear y mostrar los objetos en mi página, agrego un botón que le permite al usuario marcar el personaje como favorito. El usuario solo puede agregar hasta 6 favoritos.

 const [favorites, setFavorites = useState([]); const addFavorite = () => { favorites.length === 6 ? console.log("favorites' list is full!") : setFavorites(favorites.concat(character)) } {characters.map((character)=>{ const {props} = character; return ( <div>{props}</div> <button onClick={addFavorite}>add to favorites</button> ); })}

Ahora, lo que quiero hacer (y no sé cómo, después de muchos intentos)

  1. evitando que el usuario agregue el mismo personaje dos veces a favoritos . (Lo intenté con favorites.contains(character)? or favorites.contains({character})? pero no funcionó).
  2. si el personaje ya es un favorito, haga que el botón cambie a un botón que elimine el favorito (cambiando tanto la función como el texto del botón). (No tengo idea de cómo hacer esto).
  3. Haga una puntuación promedio de cada estadística de todos los favoritos. (Por ejemplo, con sus favoritos elegidos, su velocidad promedio es xxx y su fuerza promedio es xxx).
  4. Por último, pero no menos importante, la lista de favoritos debe tener hasta 3 personajes buenos y 3 malos. Entonces, si los personajes buenos o malos en la lista de favoritos ya son 3, el usuario no puede elegir otro personaje bueno o malo como favorito. Tampoco sé cómo proceder con este.

Estoy trabajando en un proyecto escolar y encontré mi camino a través de la mayor parte, pero me doy cuenta de que todavía tengo cosas que aprender, sobre todo acerca de los accesorios de objetos y cómo acceder a ellos. Gracias. Si algo no está claro, por favor dígalo y agregaré los datos requeridos.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Entonces, como ya lo ha descubierto usted mismo, aquí está la explicación detallada.

find es una función (o lo que a los desarrolladores sofisticados les gusta decir una función de orden superior) disponible para matrices de javascript que acepta una función que debe devolver un valor booleano, es decir, true o false .

---Desvío rápido---

Una función que debe devolver un valor booleano se denomina predicado , y esto es exactamente lo que está disponible en las sugerencias del IDE si pasa el cursor sobre find ingrese la descripción de la imagen aquí

---Fin del desvío---

Acepta múltiples parámetros, siendo obligatorio solo el predicado, y el resto son opcionales, me estoy saltando todos los opcionales, así que esa es su tarea, lea los documentos o los artículos al final de esta respuesta.

Como puede leer en la sugerencia en sí, llamará al predicado, una vez para cada elemento en la matriz, hasta que pueda encontrar uno que devuelva true y devuelva el valor del elemento, undefined de otra manera.

Lo que significa: que el primer parámetro en el predicado será su objeto y se ejecutará el mismo predicado para todos los elementos.

Ahora observa tu solución cuidadosamente:

find( savedChar => savedChar.id === character.id )

savedChar es uno de los objetos en la matriz, y debe compararse con el objeto de character , e id , que es la forma abreviada de identity , siempre lo encontrará con precisión.

Finalmente, respuestas rápidas a sus problemas.

  1. Use find para ver si el personaje ya está disponible, si es así, simplemente no lo agregue a su colección.

  2. Esto requerirá que cambie su lógica de renderizado, find si el objeto está en los favorites y renderícelo de manera diferente.

  3. al igual que find , hay un método llamado reduce , ¿por qué no lo intentas? pero eso puede ser un poco difícil, por lo que puede usar un bucle for simple en su lugar.

  4. find(savedChar => savedChar["good-or-bad"]) <- ¿cuál sería este resultado? averiguarlo

Y para más material de lectura: https://medium.com/swlh/array-helper-methods-in-es6-28fc5e5a5dc9

igual pero más detallado: https://codeburst.io/learn-and-understand-es6-helpers-easily-d41401184487

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