簡體   English   中英

如何動態創建復雜/嵌套的js對象?

[英]How to create a complex/nested js object dynamically?

我有以下數據。

var data =“ abcd”; //只是一個例子,但可以更深入。

  1. 嵌套結構作為創建abcn的字符串

現在,我想從這樣的數據創建一個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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM