【问题标题】:What functions do Arrays in Google Apps Script support?Google Apps 脚本中的数组支持哪些功能?
【发布时间】:2016-09-04 13:09:49
【问题描述】:

我不断发现 GAS 中缺少数组函数,例如调用 find 会出现错误:Cannot find function find in object

我能找到的唯一文档有些模棱两可: https://developers.google.com/apps-script/guides/services/#basic_javascript_features

Apps 脚本基于 JavaScript 1.6,加上 1.7 和 1.8 的一些功能。因此,除了内置和高级 Google 服务之外,还可以使用许多基本的 JavaScript 功能:您可以使用常见的对象,如 Array、Date、RegExp 等,以及 Math 和 Object 全局对象。但是,由于 Apps 脚本代码在 Google 的服务器上运行(不是客户端,HTML 服务页面除外),因此 DOM 操作或 Window API 等基于浏览器的功能不可用。

如何查看 Array 上可用的确切方法?

【问题讨论】:

    标签: javascript arrays google-apps-script


    【解决方案1】:

    Logger.log(Object.getOwnPropertyNames(Array.prototype)) 给出以下内容,我认为这是正确的列表:

    [constructor, toString, toLocaleString, toSource, join, reverse, sort, push, pop, shift, unshift, splice, concat, slice, indexOf, lastIndexOf, every, filter, forEach, map, some, reduce, reduceRight, length]

    【讨论】:

      【解决方案2】:

      怀疑时,测试自己!

      自己检查一下:

      function es_feature_test(f) {
        var a = [1, 2, 3, 4];
      
        try {
          a[f].call(a, function () { return true; });
          Logger.log("+ %s", f);
        } catch (e) {
          Logger.log("- %s", f);
        }
      }
      
      function es_test() {
        [
          "any",
          "every",
          "fill",
          "filter",
          "find",
          "findIndex",
          "forEach",
          "includes",
          "indexOf",
          "join",
          "keys",
          "lastIndexOf",
          "map",
          "pop",
          "push",
          "reduce",
          "reduceRight",
          "reverse",
          "shift",
          "slice",
          "some",
          "sort",
          "splice"
        ].forEach(function (fName) {
          es_feature_test(fName);
        });
      }
      

      注意:此函数列表并不详尽,仅用于示例目的。

      输出类似:

      [16-09-05 14:48:38:843 CEST] - any
      [16-09-05 14:48:38:843 CEST] + every
      [16-09-05 14:48:38:844 CEST] - fill
      [16-09-05 14:48:38:844 CEST] + filter
      [16-09-05 14:48:38:845 CEST] - find
      [16-09-05 14:48:38:846 CEST] - findIndex
      [16-09-05 14:48:38:846 CEST] + forEach
      [16-09-05 14:48:38:847 CEST] - includes
      [16-09-05 14:48:38:847 CEST] + indexOf
      [16-09-05 14:48:38:848 CEST] + join
      [16-09-05 14:48:38:848 CEST] - keys
      [16-09-05 14:48:38:849 CEST] + lastIndexOf
      [16-09-05 14:48:38:849 CEST] + map
      [16-09-05 14:48:38:850 CEST] + pop
      [16-09-05 14:48:38:850 CEST] + push
      [16-09-05 14:48:38:851 CEST] + reduce
      [16-09-05 14:48:38:851 CEST] + reduceRight
      [16-09-05 14:48:38:851 CEST] + reverse
      [16-09-05 14:48:38:852 CEST] + shift
      [16-09-05 14:48:38:852 CEST] + slice
      [16-09-05 14:48:38:853 CEST] + some
      [16-09-05 14:48:38:853 CEST] + sort
      [16-09-05 14:48:38:854 CEST] + splice
      

      另外,robd 的方法也可以正常工作,只是它只告诉您可见的方法列表。它没有告诉你:

      • 他们是否真的有效(他们可以阻止访问),
      • 哪些方法不可见。

      所以我更喜欢我稍微更明确的方法。

      比我更好的方法是实际检查功能测试用例以确保行为正确,但是......哦,好吧......

      GAS 函数调用支持趣闻

      这里有些奇怪:我首先使用.apply() 而不是.call()(出于习惯)的实现进行了测试,奇怪的是只有 GAS 编辑器中支持的方法显示为受支持。不过使用.call() 可以正常工作。比较奇怪。

      我想要我的功能工具回来!

      查看underscoreGS

      【讨论】:

      • Google 现在已经添加了几乎所有这些。截至目前,该列表中唯一不受支持的是函数调用:any。我运行了你的甜蜜代码,除了那个函数调用之外,它在所有它们前面输出加号。输出:May 3, 2020, 9:57:11 AM Info - any
      • @Magne:感谢您的更新!很高兴知道,我自己也有一段时间没有使用 GAS,但它是一个方便的工具。
      【解决方案3】:

      除了 robd 的回答之外,还有2d arrays library
      根据图片(但不是文档),一个人有 a 查找功能

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2020-10-05
      • 1970-01-01
      相关资源
      最近更新 更多