如何动态创建复杂/嵌套的js对象? [英] How to create a complex/nested js object dynamically?

查看:475
本文介绍了如何动态创建复杂/嵌套的js对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据.

var data ="a.b.c.d"; //只是一个例子,但可以更深入.

  1. 嵌套结构作为字符串来创建a.b.c.n

现在我想从这样的数据中创建一个js对象.

Now i want to create a js object from this data like this..

{
  "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); 
    }
}

问题

此函数使我返回未定义状态,因为我在每个递归调用中都发送了新创建的子对象,并且由于新创建的对象是{},因此最终结果是不确定的.

Problem

This function is returning me undefined as i am sending the newly created subobject in every recursive call and since the newly created object is {} , hence the final result is undefined.

我只想创建一个不存在的对象.例如:如果d已经存在,请在其中插入一个值. 否则会创建它.

I want to create the object only if it does not exist.For eg : if d already exists ill insert a value into it. else ill create it.

这就是我添加到@Tholle的答案中的内容.

So this is what i added to @Tholle's answer.

if(temp[array[i]] === undefined)
            temp = temp[array[i]] = {};
        else
            temp = temp[array[i]][name] = value;

因此,请提出一条出路.

So kindly suggest a way out.

推荐答案

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);

这篇关于如何动态创建复杂/嵌套的js对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆