比较两个数组,如果日期匹配创建一个新数组以供使用

comparing two arrays , If the date matches create a new array to be used

您好,我目前有两个充满数据集的数组,我正在尝试通过地址列比较两者以查看地址是否匹配,如果匹配则将数据集传递到新数组以用于其他地方.

到目前为止我已经有了这个,它目前没有比较只是传递 IHMS 数组。

var rangeMaster = ssMaster.getRange('A2:G2000');
var rangeIhms = ssIhms.getRange('A2:K2000');
Master = rangeMaster.getValues();
IHMS = rangeIhms.getValues();

//Logger.log(Master);
var i = [6];
var j = [1];
for (var i in IHMS) {
    var duplicate = false;
    for (var j in Master) {
        if(IHMS[i].join() == Master[j].join()) {
            var matchedValFromArray2 = IHMS[i];
            break;
        }
    }
}
 
//Logger.log(IHMS);
Logger.log(matchedValFromArray2);

finDes.getRange('A2:X1000').clearContent();
var h = IHMS.length;    // get number of rows
var l = IHMS[0].length; // get number of columns

finDes.getRange(finDes.getLastRow() + 1, 1, h, l).setValues(IHMS);

尚不清楚应输出哪些数组或如何输出数组,但我很确定您无需使用 google 应用程序脚本即可完成所需的操作。基本上创建一个过滤数组并使用 match 函数来包含地址匹配的值。

你可以看到一个示例in this file.

我使用这个公式来创建输出数组: =Filter(A4:D,ISNUMBER(match(C4:C,H:H,0)))

这是一些示例结果:

首先我们需要看看如何使用for循环。 比如你可以考虑。

var h={'hello','hi'};
for(int i=0;i<h.length;i++)
       h[i];  

if i=0 h[i] 是你好 i=1 h[i] 是 hi

  var h={'hello','hi'};
  for(var j in h)
    

对于 i 的第一次迭代值是 hello,因此 h[hello] 可能未定义。

并且您已经在局部 for 循环作用域和 class 级别作用域中定义了 var i,j,因此默认情况下它将采用局部 for 循环变量。

PGSystemTester 已经为工作表提供了一个很好的解决方案,如果您愿意的话,但是如果您真的需要脚本,请查看下面的答案:

function matchAddress() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssMaster = ss.getSheetByName("Master");
  var ssIhms = ss.getSheetByName("IHMS");
  var finDes = ss.getSheetByName("FinDes");

  // Considering sheets' adresses are stored in different columns
  // (1-indexing sheets vs 0-indexing arrays, so subtract 1)
  var masterAddressCol = 2; // Column C
  var ihmsAddressCol = 0;   // Column A

  // Range is filtered to exclude rows with no address column value 
  // (assumed empty rows)
  var Master = ssMaster.getRange('A2:G2000').getValues().filter(row => row[masterAddressCol]);
  var IHMS = ssIhms.getRange('A2:K2000').getValues().filter(row => row[ihmsAddressCol]);

  // Get addresses from master sheet
  var masterAddresses = Master.map(row => row[masterAddressCol]);

  // Filter IHMS by only including rows that have address in master
  var matchedValFromArray2 = IHMS.filter(row => masterAddresses.includes(row[ihmsAddressCol]));

  finDes.getRange('A2:X1000').clearContent();
  var h = matchedValFromArray2.length;    // get number of rows
  var l = matchedValFromArray2[0].length; // get number of columns

  finDes.getRange(finDes.getLastRow() + 1, 1, h, l).setValues(matchedValFromArray2);
}

大师:

IHMS:

FinDes(输出):

注:

  • 我过滤了范围以排除空白行(没有第 1 列值),如果需要可以随意删除它。