tengo un objeto como este
{ metadata: { correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d', createdDateTime: '2021-06-15T16:46:24.247Z' } }
y tengo una serie de propiedades a las que quiero acceder
[metadata, correlationId]
¿Cómo puedo acceder dinámicamente a la propiedad en el objeto? me gusta
keys.forEach((key) => { object[key][key2] ??? })
debe ser dinámico ya que no sé qué tan profundo necesitamos acceder al objeto
Aquí hay una solución sin recursividad:
const myObj = { a: { b: { c: "I'm the target" } } } const keys = ['a', 'b', 'c']; let result = myObj; for (const key of keys) { result = result[key]; } console.log(result);
O con recursividad:
const finder = (obj, keys, index = 0) => { const result = obj[keys[index++]]; if (!result) { return obj; } return finder(result, keys, index); } console.log(finder(myObj, keys));
Esto es bastante similar a Acceder a matrices y objetos de JavaScript anidados por ruta de cadena , excepto con un paso menos: ya tiene las claves que necesita en forma de matriz. .reduce
y accede al siguiente valor anidado en cada iteración.
const obj = { metadata: { correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d', createdDateTime: '2021-06-15T16:46:24.247Z' } }; const keys = ['metadata', 'correlationId']; const result = keys.reduce((a, key) => a[key], obj); console.log(result);
Esta es mi idea para resolver tu problema. Dime, si te parece bien.
let x = { metadata: { correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d', createdDateTime: '2021-06-15T16:46:24.247Z' } } let fun = x => typeof x === 'string' ? console.log(x) : Object.keys(x).map( y => fun(x[y])); fun(x);