gpt4 book ai didi

javascript - 返回两个其他数组的(已编辑)匹配项目和(未编辑)非匹配项目的数组

转载 作者:行者123 更新时间:2023-11-30 19:23:10 24 4
gpt4 key购买 nike

我的目标

我正在尝试根据单元格中的值链接同一电子表格中两个不同工作表中的行。基本思想是,如果 Sheet1 中 B 列中的值与 Sheet2 中 B 列中的值匹配,则应将超链接添加到具有 Sheet1 中匹配值的单元格,链接到 Sheet2 中匹配值的整行。

我做了什么

正如您从下面的代码中看到的那样,它会查找匹配项,如果找到,它会编辑匹配值以添加超链接。我不仅想将“链接的”匹配值推送到新数组中,我还想要没有链接的非匹配值。这个想法是,如果找到匹配项,将添加链接,否则仍将添加值,只是没有链接。

function linkToContacts(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sheet1 = ss.getSheetByName("Sheet1");
var Sheet2 = ss.getSheetByName("Sheet2");
var Sheet2ID = Sheet2.getSheetId();

var arrSheet1 = Sheet1.getRange(4,2,Sheet1.getLastRow()-3).getValues(); // -3 because I have 3 row as headers before the data, which start in row 4 col B
var arrSheet2 = Sheet2.getRange(4,2,Sheet2.getLastRow()-3).getValues(); // -3 because I have 3 row as headers before the data, which start in row 4 col B

var arrOutput = [];

for(var i = 0; i<arrSheet1.length;i++){
for(var j = 0; j<arrSheet2.length;j++) {
if(arrSheet1[i][0] === arrSheet2[j][0]){
arrOutput.push(['=HYPERLINK("#gid=' + Sheet2ID + '&range=' + Sheet2.getRange(j+4,2,1,Sheet2.getLastColumn()-1).getA1Notation() + '";"' + arrSheet1[i][0] + '")']);
} else {
arrOutput.push([arrSheet1[i][0]]);
}
}
}

Sheet1.getRange(4,2,Sheet1.getLastRow()).clearContent();
Sheet1.getRange(4,2,arrOutput.length).setValues(arrOutput);
}

问题

两个数组分别只包含唯一值。问题在于,由于双循环,每个项目都根据 arrSheet2 的长度进行检查。因此,例如让我们想象一下这种情况:

var arrSheet1 = [apple,avocado,banana];
var arrSheet2 = [apple,banana,mango,];

arrOutput 将导致:

arrOutput = [
apple(link),apple,apple,
avocado,avocado,avocado,
banana(link),banana,banana
];

以一种快速但可能不够优雅的方式解决问题我尝试从 rm arrOutput 中删除重复项,但显然带有链接的值和不带有链接的值是不同的,所以它可以做到最好得到这个解决方案是这样的:

arrOutput = [
apple(link),apple,
avocado,
banana(link),banana
];

问题

有没有更聪明/更有效的方式去

arrOutput = [apple(link),avocado,banana(link)];

或者如果我正在做的事情真的有意义,我应该怎么做才能得到上面的结果?

最佳答案

你可以使用 Array.prototype.filter创建一个只包含匹配元素的新数组。如果未找到任何元素,这将返回一个空数组。

var arrSheet1 = ['apple','avocado','banana'];
var arrSheet2 = ['apple','banana','mango'];

var intersect = arrSheet1.filter(function (element) {
return arrSheet2.includes(element);
});

// ['apple','banana']

或者没有 Array.prototype.includes填充:

var intersect = arrSheet1.filter(function (element) {
return arrSheet2.indexOf(element) !== -1);
})

关于javascript - 返回两个其他数组的(已编辑)匹配项目和(未编辑)非匹配项目的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com