[英]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"]);
請幫我解決這個問題。 如果我用於將數組作為全局傳遞的解決方案不可行,我很高興看到其他解決方案。 但它必須是全局的,因為我不能直接在函數之間傳遞數組。
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);
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.