如何在 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
我有一个 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 |