带有动态属性名称的JavaScript for-in循环

时间:2014-01-20 18:09:13

标签: javascript json for-in-loop

我想循环services_raw_nl下的所有值,并获取属于thoses值的名称和数字,例如 内部餐饮和9 和 现场音乐和6

我想使用for-in循环,但我有两个问题:

  1. 问题是services_raw_nl的名称也可能是services_raw_en(取决于用户选择的语言)。
  2. 我不确定如何访问属性及其值。基本上我只想通过索引获取services_raw_nl下的属性的名称和值。
  3. 我想将它作为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].???);
    }
    

1 个答案:

答案 0 :(得分:1)

您可以将service_raw_nl/en缓存到变量,并使用简单的for循环:

var lang = 'nl', // or 'en', this you probably have stored somewhere in your preceding code?
    services_raw = response.facet_counts.facet_fields['services_raw_' + lang],
    n;
for (n = 0; n < services_raw.length; n++) {
    console.log(services_raw[n]);
}

修改

此函数返回一个包含所需值的对象。

var lang = 'nl';
function getServices (response, lang) {
    var services_raw = response.facet_counts.facet_fields['services_raw_' + lang],
        n, temp = {};
    for (n = 0; n < services_raw.length; n+= 2) {
        temp[services_raw[n]] = services_raw[n + 1];
    }
    return temp;
}
console.log(getServices(response, lang));

A live demo at jsFiddle


编辑II

services_raw_nl的值创建一些HTML的简单方法是这样的:

var lang = 'nl',
    services_raw = response.facet_counts.facet_fields['services_raw_' + lang],
    n, outer, inner;
for (n = 0; n < services_raw.length; n += 2) {
    outer = document.createElement('span');
    outer.appendChild(document.createTextNode(services_raw[n]));
    inner = outer.appendChild(document.createElement('span'));
    inner.appendChild(document.createTextNode(services_raw[n + 1]));
    what_ever_element.appendChild(outer);
}