Javascript 表的输出指令:键顺序问题
我有一个JSON文件,我想将数据输出到GoogleSheet中的一个表中。由于不能保证数据顺序,我需要搜索第二个和后续数据集的对应行(下面示例中的星期二数据) 除了循环通过第一列之外,有没有更快或更优雅的方法Javascript 表的输出指令:键顺序问题,javascript,arrays,json,google-apps-script,google-sheets,Javascript,Arrays,Json,Google Apps Script,Google Sheets,我有一个JSON文件,我想将数据输出到GoogleSheet中的一个表中。由于不能保证数据顺序,我需要搜索第二个和后续数据集的对应行(下面示例中的星期二数据) 除了循环通过第一列之外,有没有更快或更优雅的方法 function test(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var SSheet=ss.getActiveSheet(); var data={Monday:{Apple:2, Orange:3}, Tues
function test(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var SSheet=ss.getActiveSheet();
var data={Monday:{Apple:2, Orange:3}, Tuesday:{Orange:4, Apple:5}};//intentionally swap the key
var row=2;
var column=2;
var bWriteHeader=true;
for (const g in data){
SSheet.getRange(1,column).setValue(g)
row=2;
for (const k in data[g]){
if (bWriteHeader){
SSheet.getRange(row,1).setValue(k);
SSheet.getRange(row,column).setValue(data[g][k]);
row++;
}else{
//Search for the corresponding row--- how to do it elegantly, apart from looping thru first column?
SSheet.getRange(row,column).setValue(data[g][k]);
}
}
bWriteHeader=false;
column++;
}
}
期望输出:
Monday Tuesday
Apple 2 5
Orange 3 4
我相信你的目标如下
- 您希望降低脚本的处理成本
setValue
的脚本。当此流反映到脚本时,它将变成如下所示
示例脚本:
测试:
var data={星期一:{Apple:2,Orange:3},星期二:{Orange:4,Apple:5}//故意交换钥匙
// 1. 检索行标题。
var rowHeader=Object.keys(data.sort();
// 2. 检索列标题。
var colHeader=Object.keys(数据[rowHeader[0]]).sort();
// 3. 使用行标题和列标题创建数组。
var值=行标题.reduce((ar,k)=>ar.concat([[k,…colHeader.map(l=>data[k][l])),[[“”,…colHeader]];
var res=values[0].map((u,i)=>values.map(r=>r[i]);
console.log(res)
我相信您的目标如下
- 您希望降低脚本的处理成本
setValue
的脚本。当此流反映到脚本时,它将变成如下所示
示例脚本:
测试:
var data={星期一:{Apple:2,Orange:3},星期二:{Orange:4,Apple:5}//故意交换钥匙
// 1. 检索行标题。
var rowHeader=Object.keys(data.sort();
// 2. 检索列标题。
var colHeader=Object.keys(数据[rowHeader[0]]).sort();
// 3. 使用行标题和列标题创建数组。
var值=行标题.reduce((ar,k)=>ar.concat([[k,…colHeader.map(l=>data[k][l])),[[“”,…colHeader]];
var res=values[0].map((u,i)=>values.map(r=>r[i]);
console.log(res)
@Tanaike。非常感谢您提供的代码和参考资料。我得到的比我要的还多!我不懂reduce
和res
的代码。我将需要谷歌更多的阅读这些@莱昂:谢谢你的回复。我很高兴你的问题解决了。也谢谢。@Tanaike。非常感谢您提供的代码和参考资料。我得到的比我要的还多!我不懂reduce
和res
的代码。我将需要谷歌更多的阅读这些@莱昂:谢谢你的回复。我很高兴你的问题解决了。也谢谢你。
function myFunction() {
var data = { Monday: { Apple: 2, Orange: 3 }, Tuesday: { Orange: 4, Apple: 5 } };//intentionally swap the key
// 1. Retrieve a row header.
var rowHeader = Object.keys(data).sort();
// 2. Retrieve a column header.
var colHeader = Object.keys(data[rowHeader[0]]).sort();
// 3. Create an array using the row header and column header.
var values = rowHeader.reduce((ar, k) => ar.concat([[k, ...colHeader.map(l => data[k][l])]]), [["", ...colHeader]]);
var res = values[0].map((_, i) => values.map(r => r[i]));
// 4. Put the values to the active sheet.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1, res.length, res[0].length).setValues(res);
}