迭代javascript对象,使关键变量用作调用该对象的方法
现在,我正在将新属性硬编码到我的javascript应用程序中,这是一种可怕的代码味道,但对于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); /
$.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
,才能让它正常工作。谢谢!继续向上