比较两个数组,如果日期匹配创建一个新数组以供使用
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 列值),如果需要可以随意删除它。
您好,我目前有两个充满数据集的数组,我正在尝试通过地址列比较两者以查看地址是否匹配,如果匹配则将数据集传递到新数组以用于其他地方.
到目前为止我已经有了这个,它目前没有比较只是传递 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 列值),如果需要可以随意删除它。