Tengo este objeto como ejemplo:
const obj = { group: { data: { data: [ { id: null, value: 'someValue', data: 'someData' } ] } } };Mi objetivo es obtener un valor por nombre de propiedad.
En este caso, me gustaría obtener el valor de la propiedad de data , pero la última aparición de la misma.
Lo que significa que la salida esperada es:
someDataSin embargo, estoy usando esta función recursiva para recuperarla:
const findVal = (obj, propertyToExtract) => { if (obj && obj[propertyToExtract]) return obj[propertyToExtract]; for (let key in obj) { if (typeof obj[key] === 'object') { const value = findVal(obj[key], propertyToExtract); if (value) return value; } } return false; }; Lo que me da la primera aparición de data , es decir:
data: [ { value: 'someValue', data: 'someData' } ]¿Cómo puedo obtener el resultado deseado?
una forma puede ser aplanar recursivamente el objeto y simplemente obtener el índice deseado (aquí los datos)
const obj = { group: { data: { data: [ { id: null, value: 'someValue', data: 'someData' } ] } } }; function deepFlat(obj) { let flatObj = {}; flat(obj,flatObj); console.log(flatObj); return flatObj; } function flat(toFlat, flatObj) { Object.entries(toFlat).forEach(elem => { if (elem[1] && typeof elem[1] === 'object') { flat(elem[1], flatObj); } else { flatObj[elem[0]] = elem[1]; } }); } let result = deepFlat(obj); console.log(result['data']);