Esto puede ser más simple de lo que creo, pero ¿existe una manera fácil de modificar la matriz dentro de este objeto usando una cadena?
var temp = { members: [ {file_name: 'abc', file_link: 'www'} ] }Esto es lo que estoy tratando de lograr:
const name = "members[0].file_name" // STRING temp = {...temp, [name]: 'changed'}Salida que me está dando:
Sí, puedo dividir esa cadena para darme las claves y el índice y luego cambiar el objeto de la manera normal, pero me preguntaba si hay una manera más fácil de hacerlo.
Puede usar la función eval() que devolverá el objeto que desea de acuerdo con una ruta
const temp = { members: [{ file_name: 'abc', file_link: 'www' }] } const path = "members[0].file_name"; // Obtain last key (file_name) const lastKey = path.split(".").at(-1); // Obtain the path to the last key (members[0]) const previousPath = path.substr(0, path.length - (lastKey.length + 1)); // Get the object with the path (temp.members[0]) const e = eval(`temp.${previousPath}`) // Modify object e[lastKey] = "xyz"; console.log(temp)Puede echar un vistazo a la función set de lodash que toma una ruta de cadena y devuelve el objeto anidado.
lodash hace el análisis por usted, por lo que no tiene que hacerlo
Puedes lograr esto de la siguiente manera
var temp = { members: [ {file_name: 'abc', file_link: 'www'} ] } const name = "file_name" // STRING temp.members[0][name] = "changed"; console.log(temp);O así:
var temp = { members: [ {file_name: 'abc', file_link: 'www'} ] } const name = "file_name"; const arr = "members"; temp[arr][0][name] = "changed"; console.log(temp);