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)
favorites.contains(character)? or favorites.contains({character})? pero no funcionó).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.
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 
---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.
Use find para ver si el personaje ya está disponible, si es así, simplemente no lo agregue a su colección.
Esto requerirá que cambie su lógica de renderizado, find si el objeto está en los favorites y renderícelo de manera diferente.
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.
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