繁体   English   中英

Google Apps 脚本中的集合和数据结构

[英]Sets and data structures in Google Apps Script

Google Sheets 的脚本编辑器似乎是 JavaScript 的变体,但我不知道如何使用它来处理 Sets、字典等。我已经知道如何使用 JS 数组,但数组不足以完成我的任务

通过正常方式声明一个集合(即var categoryOptions = new Set(String);给我一个“未定义集合”错误。

使用var categoryOptions = {}; 不允许我使用任何内置的 Set 函数,例如add 相反,我得到:“TypeError:在对象 [object Object] 中找不到函数添加。”

任何专业提示?

Google Apps 脚本在Rhino上运行。 Rhino 已经落后于时代了,它是 ECMAScript 5.1 级别的。 不要期望有任何 ES6 特性,例如集合或箭头函数。

在 Rhino 的 GitHub 存储库中有一个关于 Set 的未解决问题 但即使它已经实施,谷歌也不会在他们的服务器上部署新版本的 Rhino。

AppScript 运行时概述中的一些新闻https://developers.google.com/apps-script/guides/v8-runtime

从历史上看,Apps Script 一直由 Mozilla 的 Rhino JavaScript 解释器提供支持。 虽然 Rhino 为 Apps Script 提供了一种方便的方式来执行开发者脚本,但它也将 Apps Script 绑定到特定的 JavaScript 版本(ES5)。 Apps 脚本开发人员无法在使用 Rhino 运行时的脚本中使用更现代的 JavaScript 语法和功能。

为了解决这个问题,现在支持 Chrome 和 Node.js 的V8 运行时支持 Apps 脚本 您可以将现有脚本迁移到 V8 以利用现代 JavaScript 语法和功能。

看起来 Apps Script 正在 Rhino 1.7r3 上运行。 这是关于支持和不支持的内容的文章。

http://ramblings.mcpher.com/Home/excelquirks/gassnips/rhinoversion

虽然 Appscript 本身仍然远远落后于 ES 时代,但使用 Google 维护的 Clasp 工具确实可以让您现在以官方支持的方式使用 Typescript 开发应用程序脚本,这将允许您使用Set()和所有其他语言功能。

https://github.com/google/clasp/blob/master/docs/typescript.md

请注意这里的大限制,一旦您转向使用 Typescript,您将无法再在应用脚本脚本编辑器中开发/调试您的代码,因为您将查看转译的代码。

同样,也有非谷歌项目使用 webpack 和 babel 从 ESx 转换为 appscript 代码。

例如https://github.com/labnol/apps-script-starter

尝试使用此代码:

function test() {
let search_from_data = ['a', 'b', 'c', 1, 2];
let search_data = ['c', 'a', 'd', 'z', 2, 3, 4, 5];
let search_set = new Set();
for ( let i = 0 ; i < search_from_data.length ; i++ )
    search_set.add(search_from_data[i]);
for ( let i = 0 ; i < search_data.length ; i++)
    Logger.log([search_data[i], "Is present?", search_set.has(search_data[i])]);
}

此图像是上述代码的输出

Apps 脚本现在受支持 Chrome 和 Node.js 的 V8 运行时支持。 您可以将现有脚本迁移到 V8 以利用现代 JavaScript 语法和功能。 参考: https ://developers.google.com/apps-script/guides/v8-runtime

这是 Apps Script 的 ES6 shim,因此您可以使用 Set 和 Map 之类的东西。 IDE 当然不支持箭头函数或任何可能破坏 5.1 语法的东西。

http://ramblings.mcpher.com/Home/excelquirks/gassnips/es6shim

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM