动态创建嵌套Javascript对象
我有一个动态创建嵌套Javascript对象,javascript,json,string,Javascript,Json,String,我有一个(点)分隔的字符串,我想从中创建嵌套的JSON对象。字符串的长度不是固定的。比如说, var string = 'a.b.c.d'; 那么我的JSON对象应该如下所示: a: { b: { c:{ d: { //Some properties here. } } } } 我尝试了以下代码: var packageName = "a.b.c.d"
(点)分隔的字符串,我想从中创建嵌套的JSON对象。字符串的长度不是固定的。比如说,
var string = 'a.b.c.d';
那么我的JSON对象应该如下所示:
a: {
b: {
c:{
d: {
//Some properties here.
}
}
}
}
我尝试了以下代码:
var packageName = "a.b.c.d"
var splitted = packageName.split('.');
var json = {};
for(var i=0;i<splitted.length-1;i++){
json[splitted[i]] = splitted[i+1];
}
但这不是我想要的。我也在谷歌上搜索过,发现了类似的问题,但没有任何解决方案可以回答我的问题。例如 每次都需要创建一个新对象,并将其属性化为上次创建的对象。直到
splitted.length
,而不是splitted.length-1
,因为您使用的是reduce
packageName=“a.b.c.d”;
initProps={hi:'there'};
obj=packageName.split('.').reduceRight((o,x)=>({[x]:o}),initProps);
console.log(JSON.stringify(obj))
您可以使用最后分割的部分作为某些负载的属性
我建议保留对象引用,并在必要时使用临时变量来访问和创建新属性
请避免使用for not stringized objects
var packageName=“a.b.c.d”,
splitted=packageName.split('.'),
结果={},
温度=结果,
我
对于(i=0;i 控制台日志(结果)代码>正确!我不仅仅想到了这个简单的逻辑。谢谢+1、接受!您要问的是如何创建嵌套的JS对象,而不是JSON。创建JSON就是创建您的JS对象,然后将其序列化为JSON文本格式。谢谢您的选择。但我很难理解这一点+1.reduce[Right]
的优秀用例。这里发布了太多令人讨厌且难以理解的函数式编程示例,尤其是使用reduce
,很高兴看到干净、清晰、惯用的示例。
{
a: 'b',
b: 'c',
c: 'd'
}