我正在尝试将我想分开的地方分解为较小的步骤和问题,以便我可以更好地理解。我将两列(每个列包含电子邮件地址,每个来自不同的工作表)转换为两个一维数组(answered here),现在我想比较它们是否匹配。我想知道“ emailsPaidArray”中的哪个值也位于“ emailsAllArray”中。更确切地说,我需要来自“ sheetAll”中匹配项的行号(作为一维数组,例如“ rowsYesMatch”)以及不匹配项的行号(也作为一维数组,例如“ rowsNotMatch”)。
必须通过脚本而不是公式来完成。我认为这将是某种循环,但这对我来说是全新的。我没有编码技能,非常感谢您的帮助和简单的答案。
function paymentStatus() {
// Variables
var id = "ID";
var spreadSheet = SpreadsheetApp.openById(id);
var sheetAll = spreadSheet.getSheetByName("sheetAll");
var sheetPaid = spreadSheet.getSheetByName("sheetPaid");
var sheetOutput = spreadSheet.getSheetByName("sheetOutput");
var allLR = sheetAll.getLastRow();
var paidLR = sheetPaid.getLastRow();
// get tow 1D arrays
var emailsAll = sheetAll.getRange(2, 3, allLR).getValues();
var emailsPaid = sheetPaid.getRange(2, 1, paidLR).getValues();
var emailsAllArray = emailsAll.map(function(e) {return e[0];} );
// Logger.log(emailsAllArray);
var emailsPaidArray = emailsPaid.map(function(e) {return e[0];} );
// Logger.log(emailsPaidArray);
// compare two arrays
// get rows
答案 0 :(得分:2)
这个脚本怎么样?我注意到我误解了你的问题。所以我更新了。
var res = emailsAllArray.map(function(e, i) {return emailsPaidArray.some(function(f) {return e == f}) ? i + 2 : ""}).filter(Number);
// [2,3,5,6]
您也可以使用此脚本。
var res = emailsAllArray.reduce(function(ar, e, i) {
if (emailsPaidArray.some(function(f) {return e == f})) ar.push(i + 2);
return ar;
},[]);
// [2,3,5,6]
如果要检索差异值的行号,请使用它。
var res = emailsAllArray.map(function(e, i) {return emailsPaidArray.some(function(f) {return e == f}) ? "" : i + 2}).filter(Number);
// [4,7]
或
var res = emailsAllArray.reduce(function(ar, e, i) {
if (!emailsPaidArray.some(function(f) {return e == f})) ar.push(i + 2);
return ar;
},[]);
// [4,7]