离开我的previous question (这是关于获取属性),我需要使用动态属性名称设置嵌套对象成员的值。
const settings = {
service: {
username: 'foo',
password: 'bar'
}
};
const settingName = 'service.username';
const newValue = 'baz';
settings[settingName] = newValue ; // doesn't work
console.log(settings.service.username); // foo
我能想到的唯一方法是使用 eval:
eval(`settings.${settingName} = "${newValue}"`);
const settings = {
service: {
username: 'foo',
password: 'bar'
}
}
const settingName = 'service.username';
const newValue = 'baz';
eval(`settings.${settingName} = "${newValue}"`); // works, but bad
console.log(settings.service.username);
但这有问题(例如,上面的示例假设新值是字符串)。 有没有一种方法可以在不使用 eval 的情况下为未知名称的嵌套对象分配属性?
最佳答案
你可以像下面这样做,
var settings = {service: {username: 'TEST', password: ''}}
var key = "service.username";
function setValue(obj, keys, val){
keys.split(".").forEach(function(itm, i, arr){
if (i == arr.length - 1) obj[itm] = val;
else obj = obj[itm];
});
}
setValue(settings, key, "hello");
console.log(settings.service.username); //"hello"
关于javascript - 使用动态名称设置嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39556958/