tengo una propiedad como esta "data.property" = "16165456". Intento crear un objeto como este
data { property : "16" }uso split y loop pero no funciona
this.returnKey(model, this.to['pro1'], this.model[this.to['pro2']]) returnKey(model: any, name: string, value: string) { let nameParts = name.split("."), currentObject = model; for (let i in nameParts) { let part = nameParts[i] currentObject[part] = currentObject[part] this.currentObject = currentObject[part]; } let part2 = nameParts[1]; currentObject = value; }Algunos problemas:
currentObject[part] = currentObject[part] es una declaración que no logra nada. Le gustaría indicar qué asignar cuando esa propiedad aún no existe, así que hágalo:
currentObject[part] = currentObject[part] ?? {}; this.currentObject es una propiedad y no es la variable con el mismo nombre. this no es apropiado aquí. Simplemente asigne a currentObject .
La variable part2 obtiene un valor, pero no se utiliza. Así que esto no logra nada.
La asignación final currentObject = value no afectará al objeto del model , solo a esa variable local. Así también esta declaración no tiene efecto duradero.
El ciclo for itera demasiadas veces. Debería detenerse un paso antes para poder asignar el value a la propiedad del objeto principal que necesita obtenerlo.
Aquí hay una corrección a todos esos problemas:
function returnKey(model, name, value) { let nameParts = name.split("."), key = nameParts.pop(), // extract the last property currentObject = model; for (let i in nameParts) { // Now we will iterate one time less let part = nameParts[i]; // Initialise the property with `{}` when it is new: currentObject[part] = currentObject[part] ?? {}; currentObject = currentObject[part]; } // Assign to the deepest key, so the model will get it: currentObject[key] = value; } // Demo: let name = "data.numeroApplication"; let value = "16165456"; let model = {}; returnKey(model, name, value); console.log(model); // Model has mutated