根据Javascript中的键名数组动态更改对象值

时间:2020-07-02 03:59:58

标签: javascript

所以我想根据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 }
...

1 个答案:

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