簡體   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