javascript - 用点符号创建一个对象

标签 javascript json

这是this question的反向问题.

给定一个对象 x={a:1,b:2} 和一个字符串 c.d=3,将对象 x 修改为以下内容:

{
  a:1,
  b:2,
  c:{
    d:3
  }
}

我正在寻找不使用 eval 的解决方案。用例如下:

x 作为配置对象,我们调用: config.set("music.shuffle",true)

现在,必须以某种方式解析 music.shuffle 并将其添加到 config.set 函数内的内部对象 x 中,以便 x 看起来像:

x={a:1,b:2,music:{shuffle:true}}

最佳答案

我想你可以做这样的事情:

function addValueToObj(obj, newProp) {
    newProp = newProp.split("=");       // separate the "path" from the "value"

    var path = newProp[0].split("."),     // separate each step in the "path"
        val = newProp.slice(1).join("="); // allow for "=" in "value"

    for (var i = 0, tmp = obj; i < path.length - 1; i++) {
       tmp = tmp[path[i]] = {};     // loop through each part of the path adding to obj
    }
    tmp[path[i]] = val;             // at the end of the chain add the value in
}

var x = {a:1, b:2};
addValueToObj(x, "c.d=3");
// x is now {"a":1,"b":2,"c":{"d":"3"}}
addValueToObj(x, "e.f.g.h=9=9");
// x is now {"a":1,"b":2,"c":{"d":"3"},"e":{"f":{"g":{"h":"9=9"}}}}

演示:http://jsfiddle.net/E8dMF/1/

关于javascript - 用点符号创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14891040/

相关文章:

javascript - NodeJS 应用程序中的 AngularJS "ReferenceError: window is not defined"

javascript - 根据 div 内图像的数组长度

javascript - 透明背景上的图像不平滑

javascript - 解析 JSON 对象数组 - 空值阻止更新插入

javascript - Chrome 扩展程序,来自字符串的文件?

javascript - 如何退出 setInterval

javascript - 从 JSON 绑定(bind)每个表列(Head)的选择下拉列表,同时将 JSON 数据绑定(bind)到 HTML 表 Jquery

java - 使用 spring Resttemplate 使用键值对

javascript - 从 json 中的 highchart 读回图表详细信息

java - 使用 Jackson 的 ObjectMapper 解析具有动态类型(字符串或对象)的值的 JSON