Modifier dynamiquement la valeur de l'objet en fonction d'un tableau de nom de clé en Javascript
Simon Salesse-Boisclair
Je souhaite donc modifier le contenu de l'objet "alfa" en fonction d'une liste de keyNames en fonction de la newValue.
let alfa = {
bravo : {
charlie : {
delta : "echo"
}
}
}
const newValue = { foxtrot : "golf" }
Je veux faire quelque chose comme ça, dynamiquement:
alfa[keyNames] = newValue
// where if
const keyNames = ["bravo", "charlie"]
// would do:
alfa["bravo"]["charlie"] = newValue
// or if
const keyNames = ["bravo"]
// would do:
alfa["bravo"] = newValue
Comment faire ça?
Je sais que je peux le faire, mais il y a probablement un moyen de couvrir tous les cas possibles...
if(keyNames.length === 1){ alfa[keyNames[0]] = newValue }
if(keyNames.length === 2){ alfa[keyNames[0]][keyNames[1]] = newValue }
...
Obou Cheng
ce serait une fonction setValue.
const alfa = {};
const keyNames = ["bravo", "charlie"];
function setValue(target,keyPath,value){
[target,...keyNames].reduce((object,keyName) => {
if( keyName === keyPath[keyPath.length-1] ){
object[keyName] = value;
}
object[keyName] = object[keyName] || {};
return object[keyName]
})
}
setValue(alfa,keyNames,"oboo")