google-apps-script - 谷歌电子表格中的逻辑异常(exception)/差异范围

标签 google-apps-script google-sheets

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

所以,有:

答:答

{1,2,3,4}

B:B

{2,3,5,6}

enter image description here

所以我的公式

=my_amazing_formula(A:A, B:B)

应该返回

{1,4}

(A 的元素不存在于 B 中)

问题

我怎样才能实现这个目标?

最佳答案

因为不存在 HashSet 这样的数据结构在 Google Apps 脚本中,这是一个很难有效解决的问题。您可以选择二次解决方案,对于第一个范围中的每个项目,它将迭代整个第二个项目,尝试找到“匹配”,以便丢弃它。这看起来有点像@Cooper 的解决方案。

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

function DIFFERENCE(range1, range2) {
  var o = {};
  for (var i=0; i<range1.length; i++) {
    for (var j=0; j<range1[0].length; j++) {
      if (!o[range1[i][j]])
        o[range1[i][j]] = true;
    }
  }

  for (var i=0; i<range2.length; i++) {
    for (var j=0; j<range2[0].length; j++) {
      if (o[range2[i][j]])
        o[range2[i][j]] = false;
    }
  }

  return Object.keys(o).filter(function f(key) { return o[key]; }).map(function(res) { return parseFloat(res) });
}

此函数假设您正在处理数字。如果您希望它也能处理字符串,则可以将最后一行代码替换为以下内容:return Object.keys(o).filter(function f(key) { return o[key]; }) ;

您还可以在此处查看几个示例:

enter image description here enter image description here

关于google-apps-script - 谷歌电子表格中的逻辑异常(exception)/差异范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58593542/

相关文章:

google-sheets - 如何防止 Google 电子表格翻译函数名称?

javascript - 有没有办法从应用程序脚本中的 graphql API 获取数据?

google-apps-script - Google Sheets 动态过滤可编辑数据

google-apps-script - Google 电子表格中带有条件格式的色阶

google-apps-script - 如何在 Google 表格中创建多个工作表引用的 INDIRECT 数组字符串?

google-apps-script - Google App Script 自定义函数中的错误

google-sheets - 在 Google 电子表格中设置最大单元格值?

javascript - 如何捕获 JSON 导出并发送到 URL

google-apps-script - Google Apps Script 中是否有办法设置行高以适合数据

javascript - 如何将行范围合并为 json 格式?