【问题标题】:Complex JS Object复杂的 JS 对象
【发布时间】:2012-07-18 08:26:15
【问题描述】:

我正在处理一个相当复杂的 JSON 数组,如下所示。我正在尝试创建包含访问的 Country 对象数组。这是数组的示例:

{
   "data":[
      {
         "period":"Month",
         "start_date":"2012-06",
         "end_date":"2012-07",
         "attributes":{

         },
         "measures":{
            "Visits":1000000
         },
         "SubRows":[
            {
               "Unknown":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "**":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Afghanistan":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Aland Islands":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Albania":{
                  "measures":{
                     "Visits":100
                  },
                  "SubRows":null
               },
            }
         ]
      }
   ]
}

我正在使用data[0].SubRows[0] 来获取一系列国家对象,但现在我很难理解如何在下面找到一个,因为每个子对象的名称都不同?我的预期输出是针对 Google Visualization API,如下所示:

var data = google.visualization.arrayToDataTable([
  ['Country', '% Visits'],
    ['United Kingdom', 1000],
    ['United States', 1000],
    ['France', 1000],
    ['Australia', 1000],
]);

【问题讨论】:

    标签: javascript json google-visualization webtrends


    【解决方案1】:

    用于...在语句中:

    var Country = JSONObject['data']['SubRows'];
    var Data = {};
    for(name in Country)
    {
        Data[name] = Country[name]['measures']['Visits'];
    }
    

    这应该很容易满足您的需求。

    【讨论】:

      【解决方案2】:

      Glibnes 带着for in 的建议到达那里,坚持你的变量名(顺便说一句:在 JS 中,这些是对象,而不是数组......好吧,数组是对象,但我不会那么迂腐)。

      var measures = {};
      for (var cName in data[0].SubRows[0])//your country objects
      {//it's always a good idea to check if a property is set directly to the object
       //if not, inheritance chain properties will show up here, too
          if (data[0].SubRows[0].hasOwnProperty(cName))
          {
              //assuming this object will Always be set, if not: check first
              measures[cName] = data[0].SubRows[0][cName].measures.Visits;
          }
      }
      

      measures 现在将是一个一级对象,其中国家是键,值是访问。随意添加额外的检查,或直接使用这些值来构建内容或......任何

      如果我理解正确的话,你真正需要的是一个数组数组:

      var result = [['Country', '% Visits']];
      for (var cName in data[0].SubRows[0])//your country objects
      {
          if (data[0].SubRows[0].hasOwnProperty(cName))
          {
              result.push([cName,data[0].SubRows[0][cName].measures.Visits]);
          }
      }
      

      result 现在将是一个数组,由数组组成,每个数组有 2 个值。 result[x][0] -> 国家和result[x][1] -> 度量值。访问:

      result[1][0] === 'United Kingdom' && result[1][1] == 1000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多