2013-07-10 56 views
0

我的目標是通過向Array添加元素,然後使用此Array訪問JSON中的嵌套節點,從而能夠跟蹤JSON樹中的位置/深度。現在說陣列foo它有一個元素:Javascript:以編程方式構建多維數組

foo = ["customers"] 

使單元將作爲一個JSON孩子的引用,說:

jsonTree["customers"] 

其中jsonTree是一樣的東西:

{ 
"customers":{ 
    "name": "J. Goldsmith", 
    "orders": [{ 
    "order": "1", 
    "order": "2" 
    }] 
} 
} 

然後foo最終改變其大小,併成爲

foo = ["customers","orders"] 

所以JSON參考將成爲

jsonTree["customers"]["orders"] 

現在說customers.orders可以成爲customers.orders.order.date.etc.etc ......有什麼辦法來基於foo陣列的N個元素N維programmaticaly建jsonTree參考?

一些例子:

["John","Williams"] - >我要建立composer["John"]["Williams"] [ 「埃裏希」, 「沃爾夫岡」, 「科恩戈爾德」] - >我要建立composer["Erich"]["Wolfgang"]["Korngold"]

+0

[JavaScript的多維數組(http://stackoverflow.com/questions/2808926/javascript-multidimensional-arrays)的可能重複的......但我喜歡的音樂引用! JS不會做多維數組。 –

+1

你也可以解釋一下你打算怎麼做?它似乎是某種助手構造,你想要解決什麼問題? – Tomalak

+0

你想創建'jsonTree'還是隻選擇一個值?你不能只用一個循環嗎? 'var ref = jsonTree; for(var i in foo){if(foo.hasOwnProperty(i)){ref = ref [foo [i]]; }}' –

回答

2

我想你想要的是某種像我describe here查找功能,除了稍微修改,以採取陣列而不是多個參數

function generateLookupFunction(o) { 
    return function lookup(arr) { 
     var i, e = o; 
     for (i = 0; i < arr.length; ++i) { 
      if (!e.hasOwnProperty(arr[i])) 
       throw "PathNotFoundError: " + arr.slice(0, i + 1).join('/'); 
      e = e[arr[i]]; 
     } 
     return e; 
    }; 
} 

然後

var lookup = generateLookupFunction(jsonTree), 
    foo = ["customers","orders"]; 
lookup(foo); 
/*[{ 
    "order": "1", 
    "order": "2" 
}] */ 
+0

就像一個魅力,謝謝! – TMichel