2011-03-27 90 views
2

我有一個數組(目標)和一系列嵌套對象的鍵。在稍後我爲它設置一個值之前,我需要確保有一個對象。這個代碼正在工作,但只是我可能會困擾重複它。用鍵數組檢查嵌套對象

我怎樣才能做到這一點ñ在沒有重複這個開關到無窮大的數組中的鍵的數量?

for t, index in target 
    switch i 
     when 1 
      if object[target[0]] is undefined 
       object[target[0]] = {} 
     when 2 
      if object[target[0]][target[1]] is undefined 
       object[target[0]][target[1]] = {} 
     when 3 
      if object[target[0]][target[1]][target[2]] is undefined 
       object[target[0]][target[1]][target[2]] = {} 
     when 4 
      if object[target[0]][target[1]][target[2]][target[3]] is undefined 
       object[target[0]][target[1]][target[2]][target[3]] = {} 
     when 5 
      if object[target[0]][target[1]][target[2]][target[3]][target[4]] is undefined 
       object[target[0]][target[1]][target[2]][target[3]][target[4]] = {} 
     when 6 
      if object[target[0]][target[1]][target[2]][target[3]][target[4]][target[5]] is undefined 
       object[target[0]][target[1]][target[2]][target[3]][target[4]][target[5]] = {} 
+0

用遞歸研究樹迭代。 – 2011-03-27 19:17:10

回答

1

警告從我的頭頂未經測試的代碼。但是,這應該工作...

current = object 
for t in target 
    current = (current[t] ?= {}) 

或較javascripty版本:

target.reduce ((o,t)-> o[t]?={}), object 

第一個更爲清晰可辨,第二個更優雅恕我直言(並且不與current污染範圍)。

+0

請注意'Array :: reduce'在所有瀏覽器中都不可用。以下是您可以用作回退的實現:http://www.diveintojavascript.com/core-javascript-reference/the-array-object/array-reduce – 2011-03-28 17:05:08