[英]Google Scripts/Sheets: How to aggregate row/objects based on values?
我有这种格式的列表,可以从Google Analytics(分析)API中检索出来,然后将其输出到Google表格。
['dog', 'brown', 'mammal', 12],
['cat', 'black', 'mammal', 18],
['dog', 'brown', 'mammal', 7],
['goldfish', 'gold', 'chordata', 2]
如果前三个字符串相同,我想在末尾汇总数字,然后删除重复的条目。 这样:
['dog', 'brown', 'mammal', 19],
['cat', 'black', 'mammal', 18],
['goldfish', 'gold', 'chordata', 2]
我想一种方法是在普通的Javascript / Google Apps脚本中以编程方式完成此操作,或者在将列表添加到工作表后使用UnderscoreGS之类的库,或者在Google表格中使用某些功能来执行此操作。 尚未找到实现此目的的方法。 建议?
试试这个作为起点:
function groupBy(data, columns, sumCol)
{
data = data || [['dog', 'brown', 'mammal', 12],
['cat', 'black', 'mammal', 18],
['dog', 'brown', 'mammal', 7],
['goldfish', 'gold', 'chordata', 2]];
columns = columns || [0, 1, 2]; // zero-based
sumCol = sumCol || 3;
var result = {};
var row = [];
var key = '';
var value = 0;
var prev = 0;
for (var numRow = 0, h = data.length; numRow < h; numRow++)
{
row = data[numRow];
// join another row
for(var numColumn = 0, w = row.length; numColumn < w; numColumn++)
{
if (columns.indexOf(numColumn) > -1)
{
key = '' + key + row[numColumn] + ',';
}
else if(sumCol == numColumn) { value = row[numColumn]; }
}
prev = result[key];
// write result
if (prev == undefined) { result[key] = value; }
else result[key] += value;
value = 0;
key = '';
}
Logger.log(result);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.