Google apps script 谷歌电子表格中的逻辑除/差异范围

Google apps script 谷歌电子表格中的逻辑除/差异范围,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我想在谷歌电子表格中获取逻辑(A-B)或(A\B) 因此,有: A:A {1,2,3,4} 及 B:B {2,3,5,6} 所以我的公式 =my_amazing_formula(A:A, B:B) 应该回来 {1,4} (A元素不存在于B中) 问题 我如何才能做到这一点?如果您对数组有疑问,请尝试以下方法: function elementsOfANotPresentInB(a,b) { var a=a||[1,2,3,4]; var b=b||[2,3,5,6]; var

我想在谷歌电子表格中获取逻辑
(A-B)
(A\B)

因此,有:

A:A

{1,2,3,4}

B:B

{2,3,5,6}

所以我的公式

=my_amazing_formula(A:A, B:B)
应该回来

{1,4}
(A元素不存在于B中)

问题


我如何才能做到这一点?

如果您对数组有疑问,请尝试以下方法:

function elementsOfANotPresentInB(a,b) {
  var a=a||[1,2,3,4];
  var b=b||[2,3,5,6];
  var c=[];
  a.forEach(function(e){if(b.indexOf(e)==-1){c.push(e);}});
  Logger.log(c);
  return c;
}

因为在中还没有像在谷歌应用程序脚本中那样的数据结构,所以这是一个需要有效解决的有点棘手的问题。您可以选择二次解决方案,对于第一个范围中的每个项目,该解决方案将迭代整个第二个项目,试图找到一个“匹配”,以便丢弃它。这看起来有点像@Cooper的解决方案

作为替代方案,考虑到Google Apps脚本的对象保留属性插入顺序,您可以使用以下代码,从理论上讲,这些代码可以产生更好的性能结果(特别是对于更大的工作负载)

功能差异(范围1、范围2){
var o={};

对于(var i=0;i您可以使用内置公式:

=FILTER(A1:A4,ISNA(MATCH(A1:A4,B1:B4,0)))
=FILTER({1;2;3;4},ISNA(MATCH({1;2;3;4},{2;3;5;6},0)))
  • 过滤器
    输出A1:A4,其中
  • A1:A4
    ISN
    ot
    A
    可在
    B1:B4

要比较对象或数组吗?{1,2,3,4}不是有效的方法。您使用的是Range类中描述的范围,或Javascript数组或Javascript对象中的数组元素。请更详细地解释问题。嘿@JakubKopyś我的答案是否有效?如果您有任何其他问题,请告诉我。Cheers@Juan是阿拉y表示法。
{1;2}
{1,2}
都是有效数组,它们等于JavaScript
[[1],[2]
[[1,2]]
分别。你是对的@TheMaster,我以为他想定义一个数组。你能用一种更通用的方法详细说明你的答案,让我知道表格之间是否有任何差异吗?我正在研究比较整个电子表格,不仅仅是工作表,但事实证明这是非常棘手的,而且你的方法似乎很有教育意义有希望。它不会返回数据差异,只返回真/假。谢谢!