簡體   English   中英

如何在 Google Script 中將對象數組作為全局變量傳遞

[英]How to pass array of objects as global variable in Google Script

我有一組從 JS 傳遞給 GS 的對象。 這是對象數組的外觀示例(根據用戶輸入而變化)

var playersArray = 
[
{number=1, 
role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}, 

{number=2, 
role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}, 

{number=3, role=Arsonist, 
deathStatus=false, 
guardianTargetStatus=false, 
executionerTargetStatus=false, 
roleblockStatus=false}
]

在我的代碼中,我需要從這個數組中調用一些數據。 例如

var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);

當我直接在函數之間傳遞這個 playerArray 時,一切都很好。 不幸的是,對於我的一個函數,我需要在不直接傳遞它的情況下提取這個數組。

因此,我將 playerArray 設置為 GS 中的一個屬性

PropertiesService.getScriptProperties().setProperty('playersArray', JSON.stringify(playersArray)); 

然后我在相關函數中使用 getProperty 來獲取這個數組:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray'); 
  playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
  playersArray = playersArray.split(",");

出於某種原因,當我這樣做時,函數無法正確看到數組:

var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);

請幫我解決這個問題。 如果我用於將數組作為全局傳遞的解決方案不可行,我很高興看到其他解決方案。 但它必須是全局的,因為我不能直接在函數之間傳遞數組。

  • 您想將數組對象放入 PropertiesService。
  • 當您從 PropertiesService 檢索數組對象時,您希望將playersArray用作數組對象。

如果我的理解是正確的,這個修改怎么樣?

從:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
playersArray = playersArray.split(",");

到:

var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = JSON.parse(playersArray);

筆記:

  • 請注意 PropertiesService 的配額。
    • 屬性值大小為 9kB/val
    • 屬性總存儲量為 500kB/屬性存儲
  • 我認為在你的腳本中, playersArray可能像var playersArray = [{number: 1, role: "Arsonist", deathStatus: false, guardianTargetStatus: false, executionerTargetStatus: false, roleblockStatus: false},,,] 因為在將對象放入 PropertiesService 之前, Browser.msgBox(playersArray[1]["role"])起作用。 當你通過Logger.log(playersArray)看到playersArray時,你可能會看到var playersArray = [{number=1, role=Arsonist, deathStatus=false, guardianTargetStatus=false, executionerTargetStatus=false, roleblockStatus=false},,,] . playersArray為對象時,當Logger.log(playersArray)看到該對象時, :轉換為= 我認為這是 Google Apps Script 的規范。 因此,使用JSON.stringify()放入 PropertiesService 的對象可以使用JSON.parse()轉換為對象。

參考:

如果我誤解了你的問題,我深表歉意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM