【发布时间】:2019-08-20 19:03:07
【问题描述】:
试图找到一种适用于 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 脚本中不可用的功能。
【问题讨论】:
-
我的回答可能会对您有所帮助,stackoverflow.com/questions/52613907/…。它涉及使用
Object.forEach和Array.include进行循环并查找 array A 是否包含 array B 没有的内容。 -
请注意,您的 cmets 关于
Range#getValues的返回值是错误的。返回值为Arrays,其元素为Arrays,其元素为给定行中的值。即,Range#getValues返回一个二维数组,首先按行索引,然后按列索引。所以你的orders实际上是[ [a], [b], [c], [d] ]。将其展平,将products展平,然后您应该能够应用其他帖子中讨论的方法。期望您能够将箭头语法转换为函数语法是正常的。
标签: javascript arrays google-apps-script