Consideremos la siguiente matriz y objeto:
const keys = ['a', 'b', 'c']; const object = { a: { b: { c: { data: 1 } } } }Naturalmente, accedería a los datos así:
object['a']['b']['c']La pregunta es, ¿cómo puedo acceder a los datos usando la matriz como entrada? Algo como:
object[...keys]Probablemente no hay otra manera de hacer esto
const keys = ['a', 'b', 'c']; const object = { a: { b: { c: { data: 1 } } } } console.log(getValue(object, ...keys)) function getValue(obj, ...keys) { let current = obj for (const key of keys) { current = current[key] } return current }Puede recorrer las claves:
function getValueAtObjectPath(obj, path) { let val = obj; let key = path.shift(); while(key && val) { val = val[key]; key = path.shift(); }; return val; } const keys = ['a', 'b', 'c']; const object = { a: { b: { c: { data: 1 } } } } let val = getValueAtObjectPath(object, keys); console.log('value at object path: ' + JSON.stringify(val));Devolver:
value at object path: {"data":1}