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")

Articles connexes