首页 > 解决方案 > 如何重新格式化对象中的数据。(我怎样才能使行成为键和其他列的值)

问题描述

我已经能够将谷歌表格中的数据导出到一个非常棒的 JSON 文件中,只是不是我需要的格式(哎呀:))。

基本上,我有数据,其中列名是值标题(在这种情况下:位置、感染、死亡、恢复等)和行名分别是值。 在此处输入图像描述

有没有办法可以将其重新格式化为多个对象,所以我有:

 var death_data = {
      cn: "132",
      th: "0",
      mo: "0",
      au: "0",
      sg: "0",

    };


 var infected_data = {
      cn: "4415",
      th: "8",
      mo: "7",
      au: "5",
      sg: "5",

    };

(两个字母是国家代码。CN:3554+277+296+..其他中国值+...152+108+84...+13+6。)(132=125+2+1+1+ 1+1+1)

我在这里找到了一个类似的资源,但是它在 R 中。JavaScript 有类似的方法吗?

如果您想知道我是如何尝试生成对象的:

function doGet() {
  var result = {};

  var infected = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();

  var death = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();

  result = makeObject(infected);

 // result.death = makeObject(death);

//Logger.log(result);
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);



}


function makeObject(multiArr) {
  var obj = {};

  var headers = multiArr.shift();

  for(var i = 0; i < headers.length; i++){
    obj[headers[i]] = multiArr.map(function(app) {
      return app[i];
    });
      }


  return obj;
}

使用上面的代码,JSON 看起来像这样(使用 JSON 查看器 chrome 扩展): 在此处输入图像描述 其中每个键都有值,如下所示 在此处输入图像描述在此处输入图像描述

也许有比事后尝试转换格式更好的方法,而是第一次正确生成它们。

对我的 JavaScript 基本知识提前抱歉,我才刚刚开始。

任何帮助将不胜感激。

亲切的问候,卡姆登

标签: javascriptjqueryobjectgoogle-apps-scriptgoogle-sheets

解决方案


您可以通过遍历数组并添加相关值来创建这样的对象:

示例脚本:

function makeObject(multiArr) {
  var obj = {deaths:{}, infected:{}};
  var headers = multiArr.shift();

   multiArr.forEach(function(row){
    var [_,country,_,infected,deaths,_] = row;
    obj.deaths[country] = obj.deaths[country] || 0;
    obj.infected[country] = obj.infected[country] || 0;
    obj.deaths[country] = obj.deaths[country] + Number(deaths);
    obj.infected[country] = obj.infected[country] + Number(infected);
   })

  return obj;
}

推荐阅读