尝试找到一种适用于 Google Apps 脚本的方法,以比较两个数组并找到第二个数组中缺少的值。
我尝试了多种方法,但找不到一种适用于 GAS 的方法。目前正在尝试使用 for() 循环和 indexOf():
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.setActiveSheet(ss.getSheetByName('test'));
function TEST(){
var lastRow = sheet.getLastRow();
var orders = sheet.getRange(2,1,lastRow,1).getValues(); //[a,b,c,d]
var products = sheet.getRange(2, 2,lastRow,1).getValues(); //[a, b]
var missing = [];
for ( var i = 0 ; i < Object.keys(orders).length; i++){
if(products.indexOf(orders[i])<0){
missing.push(orders[i]);};
};
Logger.log(missing); //expect [c, d]
}
源表有两列要比较,第三列应该存储新的“缺失”数组。
orders products missing
a a c
b b d
c
d
我尝试了其他几篇文章中的方法,但所有方法都使用了 Google Apps 脚本中不可用的函数。
最佳答案
查找丢失的订单:
function findMissingOrders() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet110');
var orderA=sh.getRange(2,1,getColumnHeight(1)-1,1).getValues().map(function(r){return r[0];});
var prodA=sh.getRange(2,2,getColumnHeight(2)-1,1).getValues().map(function(r){return r[0];});
var missA=[];
for(var i=0;i<orderA.length;i++) {
var order=orderA[i];
if(prodA.indexOf(orderA[i])==-1) {
missA.push([orderA[i]]);
}
}
if(missA.length>0) {
sh.getRange(2,3,missA.length,1).setValues(missA);
}
}
这是 getColumnHeight() 函数:
function getColumnHeight(col,sh,ss){
var ss=ss || SpreadsheetApp.getActive();
var sh=sh || ss.getActiveSheet();
var col=col || sh.getActiveCell().getColumn();
var rg=sh.getRange(1,col,sh.getLastRow(),1);
var vA=rg.getValues();
while(vA[vA.length-1][0].length==0){
vA.splice(vA.length-1,1);
}
return vA.length;
}
之前的电子表格:
之后的电子表格:
关于javascript - 在 Google Apps 脚本中查找两个数组(缺失值)之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424192/