簡體   English   中英

動態創建嵌套的Javascript對象

[英]Create nested Javascript Object dynamically

我有一個. (點)分隔的字符串,我要從中創建嵌套的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];
}

但這又回來了

{
    a: 'b', 
    b: 'c',
    c: 'd'
}

但這不是我想要的。 我也在google上搜索,發現了類似的問題,但是沒有解決方案可以解決我的問題。 例如這個

一個很好的reduce用例

 packageName = "abcd"; initProps = {hi: 'there'}; obj = packageName.split('.').reduceRight((o, x) => ({[x]: o}), initProps); console.log(JSON.stringify(obj)) 

如果您發現循環更易於使用,則可以將循環簡明地寫為

result = {};
ptr = result;

for (let prop of packageName.split('.'))
    ptr = ptr[prop] = {};

您每次都需要創建一個新對象,並將其歸因於最后創建的對象。 一直到splitted.length而不是splitted.length - 1 ,因為您使用的是< ,不是<=

 var packageName = "abcd"; var splitted = packageName.split('.'); var json = {}; var current = json; for (var i = 0; i < splitted.length; i++) { current[splitted[i]] = {}; current = current[splitted[i]]; } console.log(json); 

您可以將最后分割的部分用作某些有效負載的屬性。

我建議保留對象引用,並在必要時使用臨時變量來加速創建新屬性。

請避免對未字符串化的對象使用JSON

 var packageName = "abcd", splitted = packageName.split('.'), result = {}, temp = result, i; for (i = 0; i < splitted.length - 1; i++) { temp[splitted[i]] = temp[splitted[i]] || {}; temp = temp[splitted[i]]; } temp[splitted[i]] = { some: 'data' }; console.log(result); 

暫無
暫無

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

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