2016-06-12 106 views
-1

我有我的json對象中實施的子行的數據表 我有20列與名稱,命名(name1,name2,nameX ... name20) 我創建子行與html在這裏我要遍歷所有的名字,如果它不爲空/空,用它添加格javascript for循環訪問對象名稱包含數字

function format_details (d) { 

     var $part1 = ' some HTML code'; 
     var $part2; 

     for (var i = 1; i < 21; i++) { 

      var $name = "d.name" + i.toString(); 
      var $compare=this[$name]; 
      if ($compare.length != 0) {$part2 += '<div class="desc_wrapper"><div class="desc">'+ this[$name] + '</div></div>';} 
      } 
     var $part3 = 'some HTML again'; 


var $result = $part1.concat($part2,$part3); 

return $result; 

如果我使用d.name1它的工作原理,但我當然有20次同樣的名字,但如果創建對象的名字並使用此{$名稱]或如果我使用d.name [我]或d.name +我不能訪問我的json的數據

你能幫我嗎我怎麼可以廁所p數據最後以數字命名?

+0

你現在的代碼有什麼問題?當你運行它會發生什麼?你看到錯誤信息嗎?意想不到的結果? – smarx

+0

對於嵌套屬性,你不能像'object ['prop1.prop2']'做類似的事情。這將引用一個看起來像「{」prop1.prop2「:'Someval」}' – charlietfl

+0

的對象我不確定,但我想你是要求var $ name = d [「name」+ i]; – JonSG

回答

2

要訪問名稱爲動態的對象屬性,請使用方括號並將名稱作爲字符串提供。以下是等價的:

d.name1 
d["name1"]  // note the quotes, the property name is a string 
d["n" + "a" + "m" + "e" + "1"] 
d["name" + i] // assuming i is 1 
var n = "name" + i; 
d[n] 
d[someFunc()] // assuming someFunc() returns the string "name1" 
在你的代碼

因此,更換這行:

var $name = "d.name" + i.toString(); 

與此:

var $name = d["name" + i]; 

我不知道你想做什麼與this[$name] - 如果這只是試圖讓動態屬性名稱工作,那麼你可以直接刪除它並使用$name,因爲(在我建議的更改後)$name將持有你的對象的價值。

+0

this作品!謝謝 –