Obtengo dos resultados diferentes dependiendo de si registro los resultados dentro de la función o si los devuelvo y registro la variable y no entiendo por qué. ¿No deberían ser iguales?
const collectionMap = { '615679ba94212894224f547c': 'Value One', '615679ba94212894224f5480': 'Value Two', '615679ba94212894224f5482': 'Value Three', '615679ba94212894224f5486': 'Value Four', '615679ba94212894224f548a': 'Value Five', '615679bb94212894224f548e': 'Value Six', } let id = '615679bb94212894224f548e' // this will log the key const collection = Object.keys(collectionMap).find((key) => { if (key === id) return collectionMap[key]; }); console.log(collection); // this will log the value const collection2 = Object.keys(collectionMap).find((key) => { if (key === id) console.log(collectionMap[key]); });El método Array find devuelve el primer elemento para el que el iterador devuelve un valor verdadero. Para los primeros cinco valores, el valor devuelto no está definido y para el sexto devuelve 'Value Six' (una cadena no vacía). Esa cadena no vacía se convierte en un valor booleano (pruebe !!'Value Six' ) y el resultado es true . Por lo tanto, se devuelve esa clave y eso es lo que imprime.
En el segundo caso, solo está abusando de find para hacer lo que forEach está destinado.
en la primera declaración, la función guardó la clave en "colección", pero en la segunda declaración, la función no guardó el valor, en lugar de esto, registró su valor
si escribes esto en la consola:
const collection3 = Object.keys(collectionMap).find((key) => { console.log(key); });JS hará un bucle en las claves de collectionMap y lo registrará
pero para que quede claro, si escribió esto en la consola:
console.log(collectionMap["615679bb94212894224f548e"])JS registrará "Value Six", eso es porque JS buscó en "615679bb94212894224f548e" en collectionMap para multar su valor
así que si escribes este código:
const collection4 = Object.keys(collectionMap).find((key) => { console.log(collectionMap[key]); });esto es lo que pasara tras bambalinas: