Tengo una matriz de longitud desconocida que define la ruta al contenido que quiero modificar en un objeto.
Esto es lo que quiero.
let updatedContent = "Hello World!"; let myArray = ["layer1","layer2","layer3"]; myObject["layer1"]["layer2"]["layer3"] = updatedContent;Mi problema es que myArray tiene una longitud desconocida. ¿Cuál es la mejor manera de actualizar un valor en el objeto?
Aquí hay un enfoque feo usando una función recursiva. La idea es recuperar las propiedades anidadas en secuencia, llamando a la función recursivamente con el nivel actual, hasta el final de la matriz:
function changeObject(obj, arr, content, index = 0) { if (index < arr.length - 1) { changeObject(obj[arr[index]], arr, content, ++index); } else { obj[arr[index]] = content; } }; const myObject = { layer1: { layer2: { layer3: "foo" } } }; let updatedContent = "Hello World!"; let myArray = ["layer1", "layer2", "layer3"]; myObject["layer1"]["layer2"]["layer3"] = updatedContent; changeObject(myObject, myArray, updatedContent); console.log(myObject);