javascript - 使用动态名称设置嵌套对象属性

标签 javascript

离开我的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/

相关文章:

javascript - Javascript 中是否存在本质上只读的对象?

javascript - 将样式属性迁移到单独的 .css 文件

javascript - JavaScript 中的动态回调

javascript - MVC 通过客户端删除自定义验证规则

javascript - 隐藏具有相同类或 ID 的第二个元素

JavaScript。像 SQL 一样连接 2 组对象的最佳方法?

javascript - 调用函数的最小方式

javascript - "Access-Control-Allow-Origin"错误,当我有 "Access-Control-Allow-Origin: *"

javascript - s3 deleteObj成功返回空对象

javascript - 为什么 `mystring[0]` 在 IE 中不返回任何内容?