【发布时间】:2014-02-10 01:06:10
【问题描述】:
我想遍历services_raw_nl 下的所有值并获取属于这些值的名称和编号,例如
内部餐饮和 9
和
现场音乐和 6
我想使用 for-in 循环,但有两个问题:
- 问题是
services_raw_nl的名称也可能是services_raw_en(取决于用户选择的语言)。 - 我不确定如何访问属性及其值。基本上我只想通过索引获取
services_raw_nl下属性的名称和值。
我想将其作为 JSFiddle 提供,但不知道如何在其中提供 JSON 数据,并且由于该服务尚未上线,我无法从 JSFiddle 调用它。
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"facet":"true",
"sort":"membervalue desc",
"fl":"id,city,thumb",
"facet.mincount":"1",
"indent":"on",
"start":"0",
"q":["*:*",
"*:*"],
"facet.field":["country_raw_nl",
"services_raw_nl",
"city"],
"wt":"json",
"fq":"country_nl:=australie",
"rows":"12"}},
"response":{"numFound":10,"start":0,"docs":[
{
"id":"842",
"city":"whitsundays",
"thumb":"735_739_CEREMONY-PAVILLION-2.jpg"}]
},
"facet_counts":{
"facet_queries":{},
"facet_fields":{
"country_raw_nl":[
"Australie",10],
"services_raw_nl":[
"In-house Catering",9,
"Live music",6],
"partylocation":[
"true",8,
"false",2],
"hasphoto":[
"true",9,
"false",1],
"hasvideo":[
"false",10],
"rating":[
"0.0",10],
"rating_rounded":[
"0.0",10],
"facet_dates":{},
"facet_ranges":{}}}
这是我正在尝试的循环:
for (var service in response.facet_counts.facet_fields.services_raw_nl) {
console.log(response.facet_counts.facet_fields.services_raw_nl[service].???);
}
【问题讨论】:
-
看起来
services_raw_nl是一个数组 而不是对象:["In-house Catering",9,"Live music",6],在这种情况下,您应该使用普通的for循环,而不是for...in。我假设你知道如何迭代数组? -
如果 'In-house Catering' 与 '9' 配对,那么理想情况下它们将包含一个像
{ name: 'In-house Catering', value: 9 }这样的对象,并且您将拥有这些对象的数组,然后您可以循环访问这些对象。 -
@Andy:拥有
{"In-house Catering": 9, "Live music": 6}形式的对象可能更有意义。 -
@FelixKling:你是对的,它是一个数组,但是你将如何解决数组名称是动态的这一事实?例如带有后缀
_nl或_en? -
看起来具体的属性名称包含在
facet.field属性中:["country_raw_nl", "services_raw_nl", "city"]。因此,您可以遍历该数组并获取以services_raw开头的字符串并将其用作属性名称。
标签: javascript json for-in-loop