2014-10-12 55 views
0

這可能是一個愚蠢的問題,但現在我無法弄清楚。所以我需要。如何將json數據推到2級或n級的陣列

我正在顯示靜態數據,但我想在將來使它動態。

var name = []; 
name.push({ name: "Gareth" }); 
name[0].push({ name: "john" }); // This statement doesn't work as name[0]!=[] I guess. 
name[0].push({name:"dolly"}); 

我想一個出來放像,

+name <--- expandable 

    +0 <--- expandable 

      name : "gareth" 

      +0 <--- expandable 
      name: "john" 

      +1 <--- expandable 
      name: "dolly" 

我知道它不是一個困難的一個。但我現在無法弄清楚。幫助將不勝感激。

+0

你是正確的,你就必須改變你的數據結構,或許,你可以添加一個' ''arr''屬性到你的''name [0]''。並做''name [0] .arr [0] - > {name:「john」}'' – Winestone 2014-10-12 11:54:57

+0

怎麼辦?你能通過代碼告訴我嗎?考慮如果可能的話它會有動態appoarch。否則至少要做Oth指數。 – micronyks 2014-10-12 11:57:26

+1

這聽起來像是一個「X-Y」問題。開始解釋用例 – charlietfl 2014-10-12 12:01:23

回答

1

你不能push 任何東西,因爲它不是一個數組,但你仍然可以分配數字的元素,並創建自己的推動。

var makePushable = function (obj) { 
    obj.push = function (item) { 
    this[this.length] = item; 
    this.length++; 
    }; 
    obj.length = 0; //Keep track of how many elements 
} 

var name = []; 
name.push({ name: "Gareth" }); 

makePushable(name[0]); 
name[0].push({ name: "john" }); 
name[0].push({ name:"dolly" }); 

而我們得到:

name[0] ---> { 
    name:"gareth", 

    0: {name:"john"}, 
    1: {name:"dolly"}, 

    length: 2, 
    push: function() { ... } 
} 
name[0][0] ---> {name:"john"} 
name[0][1] ---> {name:"dolly"} 

如果你不想pushlength不露面的for (prop in xxx) if (xxx.hasOwnProperty(prop)),你可以做一個類,像這樣:

var Pushable = function (obj) { 
    for (var i in obj) { 
    this[i] = obj[i]; 
    } 
    Object.setPrototypeOf(this, { 
    push: function (item) { 
     this[this.length] = item; 
     Object.getPrototypeOf(this).length++; 
    }, 
    length: 0 
    }); 
}; 

Pushable.prototype.push = function (item) { 
    this[this.length] = item; 
    Object.getPrototypeOf(this).length++; 
}; 
Pushable.prototype.length = 0; 

var name = []; 
name.push(new Pushable({ name:"Gareth" })); 
name[0].push(new Pushable({ name: "john" })); 
name[0].push(new Pushable({ name:"dolly" })); 
name[0][1].push(new Pushable({ name:"last kid" })); 

你可以使push功能,如果你想要自動創建一個Pushable類。

+0

但'for(prop in xxx)'會給你'name','length','0','1''''' – andlrc 2014-10-12 12:06:46

+0

@NULL是的,你可以創建一個新類代替。 – Winestone 2014-10-12 12:07:19

+0

不按預期方式工作。 – micronyks 2014-10-12 12:13:38

0

先改變你數組名 試試這個

var m = {}; m.name=[]; 
m.name.push({ name: "Gareth" }); 
m.name.push({ name: "john" }); // This statement doesn't work as name[0]!=[] I guess. 
m.name.push({name:"dolly"}); 

出把

enter image description here

+0

它將如何工作?你會解釋我嗎? – micronyks 2014-10-12 12:07:32

+0

你在數組中設置對象和在對象中不是[0]項 – 2014-10-12 12:08:29

+0

你檢查了它的輸出嗎?它並沒有給我一個輸出,我正在尋找'它的作品,但不是我想要的方式。如果你能幫助我更多。 – micronyks 2014-10-12 12:11:39