Javascript Google脚本/工作表:如何基于值聚合行/对象?
我有这种格式的列表,我从谷歌分析API检索,然后想输出到谷歌工作表Javascript Google脚本/工作表:如何基于值聚合行/对象?,javascript,google-apps-script,google-sheets,google-spreadsheet-api,google-sheets-api,Javascript,Google Apps Script,Google Sheets,Google Spreadsheet Api,Google Sheets Api,我有这种格式的列表,我从谷歌分析API检索,然后想输出到谷歌工作表 ['dog', 'brown', 'mammal', 12], ['cat', 'black', 'mammal', 18], ['dog', 'brown', 'mammal', 7], ['goldfish', 'gold', 'chordata', 2] 如果前三个字符串是相同的,我想在末尾加总数字,并删除重复条目。以便: ['dog', 'brown', 'mammal', 19], ['cat', 'black',
['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脚本中以编程方式实现,或者在将列表添加到工作表后,使用一些库(如下划线)或Google Sheets中的一些函数实现。我还没有找到一个方法来做这件事。建议?尝试将此作为起点:
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);
}
函数分组依据(数据、列、sumCol)
{
数据=数据| |['狗','棕色','哺乳动物',12],
[“猫”,“黑”,“哺乳动物”,18],
[“狗”,“棕色”,“哺乳动物”,7],
[goldfish',gold',chordata',2]];
columns=columns | |[0,1,2];//从零开始
sumCol=sumCol | | 3;
var result={};
var行=[];
var键=“”;
var值=0;
var-prev=0;
对于(var numRow=0,h=data.length;numRow-1)
{
键=“”+键+行[numColumn]+',';
}
else如果(sumCol==numColumn){value=row[numColumn];}
}
prev=结果[键];
//写入结果
如果(prev==未定义){result[key]=value;}
else结果[键]+=值;
数值=0;
键='';
}
Logger.log(结果);
}
尝试将此作为起点:
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);
}
函数分组依据(数据、列、sumCol)
{
数据=数据| |['狗','棕色','哺乳动物',12],
[“猫”,“黑”,“哺乳动物”,18],
[“狗”,“棕色”,“哺乳动物”,7],
[goldfish',gold',chordata',2]];
columns=columns | |[0,1,2];//从零开始
sumCol=sumCol | | 3;
var result={};
var行=[];
var键=“”;
var值=0;
var-prev=0;
对于(var numRow=0,h=data.length;numRow-1)
{
键=“”+键+行[numColumn]+',';
}
else如果(sumCol==numColumn){value=row[numColumn];}
}
prev=结果[键];
//写入结果
如果(prev==未定义){result[key]=value;}
else结果[键]+=值;
数值=0;
键='';
}
Logger.log(结果);
}