如何动态创建复杂/嵌套的js对象
How to create a complex/nested js object dynamically?
我有以下数据。
var data="a.b.c.d"//只是一个例子,但可以更深入
- 作为字符串的嵌套结构,用于创建A.b.c.n
现在我想从这个数据创建一个js对象,如下所示。。
{
"a":{
"b":{
"c":{
and so on till the given depth.
}
}
}
}
我尝试过的
function createHierarchy( obj, group, i){
if(i === group.length){
return obj;
}
else{
if(obj[group[i]] === undefined)
{
obj[group[i]] = new Object();
}
createHierarchy(obj[group[i]], group, ++i);
}
}
问题
由于我在每次递归调用中都发送新创建的子对象,并且由于新创建的对象是{},因此最终结果是未定义的,因此此函数将返回未定义的结果。
更新
我只想在对象不存在的情况下创建它。例如:如果d已经存在,就在其中插入一个值。否则将创建它。
这就是我在@Tholle的回答中添加的内容。
if(temp[array[i]] === undefined)
temp = temp[array[i]] = {};
else
temp = temp[array[i]][name] = value;
因此,请建议一条出路。
var data = "a.b.c.n";
var array = data.split(".");
var result = {};
var temp = result;
for(var i = 0; i < array.length; i++) {
temp = temp[array[i]] = {};
}
console.log(result);
function BuildObj(string) {
var obj = {};
var params = string.split(".");
for(var i=params.length-1;i>=0;i--) {
last = obj;
obj = {};
obj[params[i]] = last;
}
return obj;
}
所以,
buildObj("a.b.c.d");
提供:
{
"a": {
"b": {
"c": {
"d": {}
}
}
}
var data = "a.b.c.n";
var array = data.split(".");
var last = {};
var temp = {};
for (var i = array.length - 1; i >= 0; i--) {
temp = {};
temp[array[i]] = last;
last = temp;
}
console.log(last);
https://jsfiddle.net/qo21eh84/2/
相关文章:
- 带嵌套json的下划线js查找
- 如何为d3.js图表输出组织/嵌套数据
- Ember.js(2.5.0)如何设置嵌套对象值
- immutable.js与嵌套映射/对象的比较/相等性能
- 嵌套的promise节点js
- Knockout.js中带有if:子句的嵌套循环
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 在Immutable js-Map中执行嵌套更新
- 无法格式化keystone.js中的嵌套日期字段
- 使用Angular.js解析JSON中的嵌套对象数组
- JS中的嵌套函数
- 聚合Sails.JS/Waterline中的嵌套模型数据
- 节点.js中的嵌套异步操作
- 将JS对象数组转换为嵌套形式的最有效方法
- 深度嵌套的backbone.js对象会导致错误
- 挖空.js嵌套视图模型不起作用
- ldap.js :嵌套搜索
- 嵌套 JS 命名空间
- 计算嵌套js对象中项目的长度
- 嵌套JS脚本.美元.随机脚本后getScript失败