如何解决比较两个数组,如果日期匹配,则创建一个要使用的新数组 大师:IHMS:FinDes输出:注意:
嗨,我目前有两个充满数据集的数组,我正在尝试通过地址列比较两者以查看地址是否匹配,如果匹配,则将数据集传递到一个新数组以在其他地方使用。
到目前为止,我已经有了这个,目前还没有比较只是传递 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);
解决方法
不清楚应该输出哪些数组或如何输出数组,但我很确定您可以在不使用谷歌应用程序脚本的情况下完成所需的工作。基本上创建一个过滤数组并使用 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];
如果 i=0 h[i] 是你好 i=1 h[i] 是 hi
var h={'hello','hi'};
for(var j in h)
对于 i 的第一次迭代值是 hello 所以 h[hello] 可能是未定义的。
并且您已经在本地 for 循环范围和类级别范围中定义了 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(输出):
注意:
- 我过滤了范围以排除空白行(没有第一列值),如果需要,可以随意删除它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。