如何动态创建复杂/嵌套的js对象

How to create a complex/nested js object dynamically?

本文关键字:嵌套 js 对象 复杂 创建 何动态 动态      更新时间:2023-09-26

我有以下数据。

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

  1. 作为字符串的嵌套结构,用于创建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/