具有动态属性名称的in-loop的JavaScript

具有动态属性名称的in-loop的JavaScript,javascript,json,for-in-loop,Javascript,Json,For In Loop,我想循环遍历服务\u raw\nl下的所有值,并获取属于这些值的名称和编号,例如。 内部餐饮和9 和 现场音乐和6 我想使用for in循环,但我有两个问题: 问题是服务\u raw\u nl的名称也可能是服务\u raw\u en(取决于用户选择的语言) 我不确定如何访问属性及其值。基本上,我只想通过索引获取services\u raw\nl下属性的名称和值 我想将其作为一个JSIDdle提供,但不知道如何使JSON数据在那里可用,而且由于这个服务还没有启用,我无法从JSIDdle调用它 {

我想循环遍历
服务\u raw\nl
下的所有值,并获取属于这些值的名称和编号,例如。 内部餐饮和9 和 现场音乐和6

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

  • 问题是
    服务\u raw\u nl
    的名称也可能是
    服务\u raw\u en
    (取决于用户选择的语言)
  • 我不确定如何访问属性及其值。基本上,我只想通过索引获取
    services\u raw\nl
    下属性的名称和值
  • 我想将其作为一个JSIDdle提供,但不知道如何使JSON数据在那里可用,而且由于这个服务还没有启用,我无法从JSIDdle调用它

    {
      "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].???);
    }
    

    您可以将
    service\u raw\u 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]);
    }
    

    看起来
    服务\u raw\nl
    是一个数组而不是一个对象:
    [“内部餐饮”,9,“现场音乐”,6]
    ,在这种情况下,您应该为
    循环使用正常的
    ,而不是为
    中的…使用
    。我假设您知道如何迭代数组?如果“内部餐饮”与“9”成对出现,那么理想情况下,它们将包含一个对象,如
    {name:“内部餐饮”,value:9}
    ,您将拥有这些对象的数组,然后您可以循环。@Andy:拥有一个形式为
    {“内部餐饮”:9,“现场音乐”的对象:6}
    可能更有意义。@FelixKling:你是对的,这是一个数组,但是你如何解决数组名称是动态的这一事实呢?e、 g.使用后缀
    \u nl
    \u en
    ?看起来特定的属性名称包含在
    方面。字段
    属性:
    [“国家”、“服务”、“城市”]
    。因此,您可以迭代该数组,获取以
    services\u raw
    开头的字符串,并将其用作属性名。啊,谢谢!您的代码检索title和value,但是如何分别访问它们并将这些值分别分配给title和count变量呢?e、 g.
    内部餐饮
    9
    。谢谢我不知道你现在在问什么。上面的代码通过索引为您提供“
    …services\u raw\u nl下属性的名称和值。”
    。也许你想创建一个对象?我将编辑答案…我想我不确定这一行的作用是什么
    console.log(services\u raw[n])
    ,因为我在控制台中看到了属性的名称,在下一行看到了该属性的值。我认为前面提到的行只打印名称+值。我不需要对象,但希望看到打印2个控制台行的代码:1个用于属性名称,1个用于值,一旦有了这些值,我就可以在其他地方使用它们。我不清楚的事情清楚吗?:)
    getServices()
    返回一个对象。在
    services\u raw\nl
    数组中有四个值,如果不使用数组或对象,就不能将它们放入两个变量中。您希望从
    服务\u raw\u nl
    中获取哪些值?还可以返回一个对象数组…你可以在我最后的评论中使用小提琴。或者只是创建一个数组,并以相同的方式迭代,就像我在第二个代码片段(
    n+=2
    )中迭代的
    services\u raw
    )。
    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));
    
    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);
    }