迭代javascript对象,使关键变量用作调用该对象的方法

迭代javascript对象,使关键变量用作调用该对象的方法,javascript,jquery,Javascript,Jquery,现在,我正在将新属性硬编码到我的javascript应用程序中,这是一种可怕的代码味道,但对于javascript实现,我不知道有什么更好的方法。这就是我的代码现在的样子: $.getJSON(url, function(data) { $("#total_population_2013").html(data.table.total_population_2013); $("#median_age_2013").html(data.table.median_age_2013); /

现在,我正在将新属性硬编码到我的javascript应用程序中,这是一种可怕的代码味道,但对于javascript实现,我不知道有什么更好的方法。这就是我的代码现在的样子:

$.getJSON(url, function(data) {
  $("#total_population_2013").html(data.table.total_population_2013);
  $("#median_age_2013").html(data.table.median_age_2013);
  //ETCETERA, FOR A VERY LONG TIME I MIGHT ADD
});
它是一个转换成json的ruby OpenStruct对象,我将其发送到getJSON方法。尝试和错误解决方案,但我可以访问其属性,如上所示

我将要添加更多的变量,并将其写入html id标记中,我更愿意以更专业的方式这样做。以下是我迄今为止尝试过但不起作用的方法:

$.getJSON(url, function(data) {
  for(var k in data) {
    var value = data[k];
    var id_str = "#"+k;
    $(id_str).html(value);
  });
}

谢谢,我注意到两件事。一个是,
for..in
迭代对象的所有属性,其中可以包括它从原型链获得的内容。这通常不是您想要的,因此您希望这样做:

for(var k in data) if (data.hasOwnProperty(k)) {

   ...

}
这样可以确保只获取对象自己的属性

其次,您的JSON似乎将其数据放在
data.table
下,而您只是从
data
中提取数据。这意味着,您将只获得
作为一个值,而您可能没有任何id为
#表
的内容。我怀疑你想要:

for(var name in data.table) if (data.table.hasOwnProperty(k)) {
    $("#" + name).html(data.table[name]);
}

我注意到两件事。一个是,
for..in
迭代对象的所有属性,其中可以包括它从原型链获得的内容。这通常不是您想要的,因此您希望这样做:

for(var k in data) if (data.hasOwnProperty(k)) {

   ...

}
这样可以确保只获取对象自己的属性

其次,您的JSON似乎将其数据放在
data.table
下,而您只是从
data
中提取数据。这意味着,您将只获得
作为一个值,而您可能没有任何id为
#表
的内容。我怀疑你想要:

for(var name in data.table) if (data.table.hasOwnProperty(k)) {
    $("#" + name).html(data.table[name]);
}

你说的“不工作”是什么意思?你能举一个JSON的例子,也许还有一个可能的结果的例子吗?看起来你应该在数据中循环。table:for(vark in data.table){从你的例子来看,似乎你应该在数据中使用
k。table
而不仅仅是
k in data
。你说的是什么“不工作”?您能给出一个JSON的示例,以及一个可能的结果的示例吗?看起来您应该在data.table:for(data.table中的var k)中循环{从您的示例来看,似乎您应该在data.table中使用
k,而不是在data.table中使用
k
。哦,这很好,我从来没有注意到这样一个事实:您可以使用
if(…hasOwnProperty…
作为
for
上的单个语句,以避免最后出现两个
{}
和相关缩进。仅此一项为+1!@JamesThorpe on某人向我展示了我问的一个问题,从那时起我就一直使用它!这实际上并不是现成的。我必须将数据重新声明为
data=data.table
才能让它正常工作。不过谢谢!继续向上!这很好,我希望如此从不记录事实您可以使用
if(…hasOwnProperty…
作为
for
的单个语句,以避免以两个
{}结尾
和相关缩进。仅此一项为+1!@JamesThorpe on Someone向我展示了我问的一个问题,从那时起我就一直在使用它!这实际上不是现成的。我必须将数据重新声明为
data=data.table
,才能让它正常工作。谢谢!继续向上