Hola, esta es una matriz de objetos.
const raceId = '1004' const array = [ { '1004': { brackets: { '18': [Object], '19': [Object], '20': [Object] } } }, { '999': { brackets: { '1': [Object], '2': [Object], '3': [Object] } } } ]Así que estoy tratando de devolver solo un
{ brackets: { '18': [Object], '19': [Object], '20': [Object] } }Intenté usar reduce(), map(), find() pero no obtuve el resultado deseado. Por ejemplo lo he intentado.
const reduced = raceScoringConfigGroups.reduce((acc, key) => { if (Object.keys(key)[0] === raceId) { return key[raceId] } }, {})Pero por alguna razón que no se define, ¿alguien puede ayudarme un poco? No estoy seguro de lo que estoy haciendo mal. No me gustan las soluciones con forEach o bucles for, tratando de escribir oneliner.
El valor que devuelve en la devolución de llamada reduce() se usa como acumulador en la siguiente iteración. Dado que no devuelve nada cuando la clave no coincide con raceId , su código solo funcionará si la clave coincidente es el último elemento de la matriz.
Use find() en lugar de reduce() , y luego obtenga la propiedad de eso.
const found = raceScoringConfigGroups.find(el => el[raceId]); const reduced = found?.[raceId];¿Puedes probar esto?
const result = array.filter(el => Object.keys(el) === raceId)[0];
Bueno, hasta cierto punto funciona como un bucle porque si coloca un archivo console.log antes de la tecla de retorno [raceId], verá que primero devuelve un valor y luego indefinido.
No sé si está cerca de lo que quieres hacer, pero esta también es una forma de encontrar el objeto.
const findIt = array.find( item => Object.keys(item)[0] === raceId); console.log(findIt) console.log(findIt['1004'])