我已经能够将谷歌表格中的数据导出到一个非常棒的 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",
};
(这2个字母是国家代码。CN:3554+277+296+..其他中国值+...152+108+84...+13+6。)(132=125+2+1 +1+1+1+1)
我找到了类似的资源here ,但它是在 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 Viewer chrome 扩展): 每个键都有值,如下所示: 和这个
也许有比事后尝试转换格式更好的方法,而只是第一次正确生成它们。
提前抱歉,我的 JavaScript 基础知识有限,我才刚刚开始。
任何帮助将不胜感激。
亲切的问候, 卡姆登
最佳答案
您可以通过循环数组并添加相关值来创建这样的对象:
示例脚本:
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;
}
关于javascript - 如何重新格式化对象中的数据。 (我如何使行成为键,其他列成为值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974443/