这是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"}}}}
关于javascript - 用点符号创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14891040/