所以我想根据newValue根据键名列表更改对象“ alfa”的内容。
let alfa = {
bravo : {
charlie : {
delta : "echo"
}
}
}
const newValue = { foxtrot : "golf" }
我想动态地做这样的事情:
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
该怎么做?
我知道我可以做到,但是可能有一种方法可以涵盖所有可能的情况...
if(keyNames.length === 1){ alfa[keyNames[0]] = newValue }
if(keyNames.length === 2){ alfa[keyNames[0]][keyNames[1]] = newValue }
...
答案 0 :(得分:1)
这将是一个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")