2015-08-29 177 views
0

我想動態填充樹。所以,我不喜歡這樣寫道:動態填充樹

  if (TreeTableDataLine.PELEMENT == currPelement) { 
     element = { 
      element : TreeTableDataLine.ELEMENT, 
      TEXT : TreeTableDataLine.TEXT, 
     };          
     pelement[TreeTableDataLine.PELEMENT][TreeTableDataLine.ELEMENT] = element; 

有沒有辦法來填補路徑
pelement[TreeTableDataLine.PELEMENT][TreeTableDataLine.ELEMENT]
動態?

我嘗試這樣做:

for (var p = 0; p < pathAr.length; p++) { 
      if (p == 0) { 
       path = pathAr[p] ; 
      } else { 
       path = path + "." + pathAr[p]; 
      } 
     } 
pelement[path] = element; 

但是,這是行不通的。

+0

閱讀[問]「」' – Amit

回答

0

短缺使用eval(),我不認爲有一種方法使用像y.z這樣的字符串來評估x.y.z。您需要循環,隨時更新當前參考點。

例如(我的第二次嘗試):

if (pathAr.length === 1) { 
    pelement[pathAr[0]] = element; 
    return; 
} 
var p = pelement[pathAr[0]]; 
for (var i = 1; i < pathAr.length - 1; i++) { 
    p = p[pelement[pathAr[i]]; 
} 
p[pathAr[pathAr.length-1]] = element; 

,或者在一個行:

pathAr.slice(0,pathAr.length-1).reduce(function(acc,x) { 
    return acc[x]; }, 
    thing)[pathAr[pathAr.length - 1]] = element 
+0

感謝史蒂夫,它的工作原理至今。現在我這樣做。開關(pathAr.length){ \t \t \t殼體1: \t \t \t \t P成分[pathAr [pathAr.length - 1]] =元素; \t \t \t \t break; \t \t \t殼體2: \t \t \t \t P成分[pathAr [pathAr.length - 2]] [pathAr [pathAr.length - 1]] =元素; \t \t \t \t break; \t \t \t殼體3: \t \t \t \t P成分[pathAr [pathAr.length - 3]] [pathAr [pathAr.length - 2]] [pathAr [pathAr.length - 1]] =元素; \t \t \t \t break; \t \t \t殼體4: \t \t \t \t P成分[pathAr [pathAr.length - 4]] [pathAr [pathAr.length - 3]] [pathAr [pathAr.length - 2]] [pathAr [pathAr.length - 1]] = element; \t \t \t \t break; \t \t \t默認值: – schnippko