Javascript 使用动态名称设置嵌套对象特性

Javascript 使用动态名称设置嵌套对象特性,javascript,Javascript,我需要使用动态属性名设置嵌套对象成员的值 const设置={ 服务:{ 用户名:“foo”, 密码:'bar' } }; const settingName='service.username'; const newValue='baz'; 设置[设置名称]=新值;//不起作用 console.log(settings.service.username);//foo你可以像下面这样做 var settings = {service: {username: 'TEST', password: '

我需要使用动态属性名设置嵌套对象成员的值

const设置={
服务:{
用户名:“foo”,
密码:'bar'
}
};
const settingName='service.username';
const newValue='baz';
设置[设置名称]=新值;//不起作用

console.log(settings.service.username);//foo
你可以像下面这样做

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"

还有我之前的回答:

我们可以使用构造函数来创建和运行代码,这些代码将按属性名称设置属性,就像使用常规的点属性访问一样

const设置={
服务:{
用户名:“foo”,
密码:'bar'
}
};
const settingName='service.username';
const newValue='baz';
函数('settings','value','settings'.+settingName+'=value')(settings,newValue);

console.log(settings.service.username);//“baz”
你就不能使用你另一个问题中稍微修改过的getter函数吗?这与我上面的
eval
示例有何不同?(我的意思是,这怎么比eval更好?@marksomnian我的代码适用于任何类型的值(不仅仅是字符串)。如果您不清楚
eval
函数
构造函数之间的区别,您可能想看看这里: