javascript - 在 Google Apps 脚本中查找两个数组(缺失值)之间的差异

标签 javascript arrays 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;
}

之前的电子表格:

enter image description here

之后的电子表格:

enter image description here

关于javascript - 在 Google Apps 脚本中查找两个数组(缺失值)之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424192/

相关文章:

c - 数组直方图主

git - 有没有办法导入/导出容器绑定(bind)脚本

javascript - 获取可细化字符串的内部 id

javascript - 在javascript中将java列表转换为数组

javascript - 使 Jquery Autocomplete 或 Select2 插件在 knockout foreach 绑定(bind)中工作

c - 为什么编译器不检测字符串常量初始化中的越界?

javascript - jQuery toggle 使元素显示在它下面的元素后面

arrays - 二分搜索与二分搜索树

scripting - 谷歌云端硬盘 : Move file to folder

google-apps-script - Importhtml() 和 Importxml() "Could not fetch URL"- 仅在特定网页上