如何在 google 应用程序脚本中比较和连接二维数组中的多个数据

How to compare and concatenate several data in a 2D array on google app script

我有一个 google sheet“测试”,其中包含以下数据

每个用户邮件都有一个关联的名称。 我想在一行中合并重复的电子邮件,并将与它们关联的名字连接起来,以便在 C 和 D 列上获得以下结果:

我尝试了下面的这段代码,因为我认为解决方案必须用二维数组来解决,因为 google sheet 可以接收大量电子邮件和不同的名字。

function myFunction() {
var test = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
const [,...value] = test.getDataRange().getValues(); // Get the values of the arrays

const arrayValue = value.flatMap(([a1,v1]) =>
value.map(([a2,v2]) => {
  const verif = a1==a2 && v1!=v2 ? a2.concat(','+v1+','+v2):'no';
  const name = verif == a2.concat(','+v1+','+v2) ?  v1.concat (','+v2):''; 
  const mail = name != '' ? a2:''; 
    return [mail,name];
  })
);
 test.getRange(1, 3, arrayValue.length,2).setValues(arrayValue);
}

今天用我的代码我只得到这个结果

几个星期以来,我一直在寻找解决我的问题的方法,但我还没有找到任何解决方法。你有什么想法吗?

谢谢!

试试这个:

function lfunko() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const osh = ss.getSheetByName("Sheet1");
  osh.clearContents();
  const vs = sh.getDataRange().getValues();
  let obj = { pA: [] };
  vs.forEach((r, i) => {
    if (!obj.hasOwnProperty(r[0])) {
      obj[r[0]] = [r[1]];
      obj.pA.push(r[0]);
    } else {
      obj[r[0]].push(r[1]);
    }
  });
  let oA = [];
  obj.pA.forEach(p => {
    oA.push([p,obj[p].join(',')])
  })
  osh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
}

数据:

A B
one@domain.com name1
one@domain.com name2
one@domain.com name3
two@domain.com name4
two@domain.com name5
three@domain.com name5

输出:

A B
one@domain.com name1,name2,name3
two@domain.com name4,name5
three@domain.com name5