[英]Find difference between two arrays (missing values) in Google Apps Script
試圖找到一種適用於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;
}
電子表格之前:
試算表之后:
您是否嘗試過在orders
變量上使用.filter()
? 這樣的事情應該可以解決問題:
var orders = sheet.getRange(2,1,lastRow,1).getValues().map(firstOfArray)
var products = sheet.getRange(2, 2,lastRow,1).getValues().map(firstOfArray)
var missing = orders.filter(missing)
function firstOfArray(array) {
return array[0]
}
function missing(order) {
return products.indexOf(order) === -1
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.