Tengo una hoja de google "test" con los siguientes datos 
Cada correo de usuario tiene asociado un nombre. Me gustaría fusionar en una línea los correos electrónicos que se repiten y concatenar los nombres asociados con ellos para obtener el siguiente resultado en las columnas C y D así: 
Probé este código a continuación porque creo que la solución debe resolverse con una matriz 2D porque la hoja de Google puede recibir una gran cantidad de correos electrónicos y diferentes nombres.
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); } Hoy con mi código solo obtengo este resultado 🥲 
Hace varias semanas que estoy buscando una solución a mi problema y no he encontrado nada para solucionarlo. ¿Tienes una idea?
¡Gracias!
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); }Datos:
| A | B |
|---|---|
| uno@dominio.com | nombre1 |
| uno@dominio.com | nombre2 |
| uno@dominio.com | nombre3 |
| dos@dominio.com | nombre4 |
| dos@dominio.com | nombre5 |
| tres@dominio.com | nombre5 |
producción:
| A | B |
|---|---|
| uno@dominio.com | nombre1,nombre2,nombre3 |
| dos@dominio.com | nombre4,nombre5 |
| tres@dominio.com | nombre5 |