Javascript 使用google应用程序脚本获取具有多列的唯一数据

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,我是谷歌应用程序脚本和javascript的新手。在这个话题上需要一些帮助 当前数据: 美国第一周 第1周荷兰 第1周南非 周2土耳其 周2英国 第2周美国 美国第一周 周2英国 修改为: 第1周美国2 荷兰1 南非1 第2周美国1 英国2 土耳其1这里有一个可能的解决方案。只需将代码复制到脚本编辑器并保存即可。 然后您可以在电子表格中这样使用它:=countcountcountcountries(A1:B8) 函数组值(array2D){ var result={}; 对于(变量i=0;i

我是谷歌应用程序脚本和javascript的新手。在这个话题上需要一些帮助

当前数据:

美国第一周
第1周荷兰
第1周南非
周2土耳其
周2英国
第2周美国
美国第一周
周2英国

修改为:
第1周美国2
荷兰1
南非1
第2周美国1
英国2

土耳其1

这里有一个可能的解决方案。只需将代码复制到脚本编辑器并保存即可。 然后您可以在电子表格中这样使用它:
=countcountcountcountries(A1:B8)

函数组值(array2D){
var result={};
对于(变量i=0;i
似乎一个数据透视表就足够了,而一个脚本是不必要的。它采用OP的post中的第一个数据表-采用两列(a和B)并统计B的出现次数(总共3列),然后按a、B分组(即,对于a和B的每个唯一实例,完成B的计数)-->给出OP需要的第二个表。
function groupValues(array2D) {
  var result = {};
  for(var i = 0; i < array2D.length; i++) {
    if(!(array2D[i] instanceof Array) || array2D[i].length < 2) throw new Error("two columns are needed");
    if(!result[array2D[i][0]]) result[array2D[i][0]] = [];
    result[array2D[i][0]].push(array2D[i][1]);
  }
  return result;
}

function countValues(array) {
  var result = {};
  for(var i = 0; i < array.length; i++) {
    if(!result[array[i]]) result[array[i]] = 0;
    result[array[i]] = result[array[i]] + 1;
  }
  return result;
}

function toArray(o) {
  var result = [];
  for(key in o) {
    result.push([key, o[key]]);
  }
  return result;
}

function countCountries(range) {
  var grouped = toArray(groupValues(range));
  grouped.sort();
  grouped.forEach(function(values) {
    values[1] = toArray(countValues(values[1]));
  });
  var result = [];
  for(var i = 0; i < grouped.length; i++) {
    result.push([grouped[i][0], grouped[i][1][0][0], grouped[i][1][0][1]]);
    for(var j = 1; j < grouped[i][1].length; j++) {
      result.push(["", grouped[i][1][j][0], grouped[i][1][j][1]]);
    }
  }
  return result;
}
  =QUERY(A14:B21,"Select A,B,Count(B) group by A,B")