2016-06-12 64 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作品!谢谢 –