数组中的 Google 脚本数组没有按照我的预期进行

问题描述 投票:0回答:1

我正在代码的一个 for 循环中收集一组数据。在第二个 for 循环中(查看不同的数据源),我想添加一组用户谷歌帐户。

“instrumentGroups[]”数组应包含以下元素:{FolderName、FolderID、FolderViewers 和 NewViewers[]}。通过 getViewers() 函数,FolderViewers 已正确创建为数组。我希望能够在第二个循环中添加 NewViewers。

我以为我已经用下面的代码破解了它,但是每当第二个循环中发生 .push 时,它就会更新“InstrumentGroups”数组中的所有“NewViewers”数组。据推测,实际上只有一个“NewViewers”数组。如何确保“InstrumentGroups”中的每个条目都有一个“NewViewers”数组。代码的简化版本在这里:

var fldrViewers, newViewer=[];
var instrumentGroups=[], userGoogleAccount;

for (nCounter=0; childFolders.hasNext(); nCounter++){ //on exit from this loop, instrumentGroups has the list of folders, their ID and viewers emails.
    //explore how to identify a folder within a drive
    childFolder=childFolders.next();
    childFolderName=childFolder.getName();
    childFolderID=childFolder.getId();
    fldrViewers=childFolder.getViewers().map((user) => user.getEmail());
    instrumentGroups.push({FolderName : childFolderName, FolderID : childFolderID, FolderViewers : fldrViewers, NewViewers : newViewer});
  }

for (userCounter=1; userCounter<=rRows; userCounter++){
    for (nCounter=0; nCounter<instrumentGroups.length; nCounter++) { //find the entry in instrumentGroups that contains the instrument of the player.
      if (rRange.getCell(userCounter, FOLDER_COL).getValue()==instrumentGroups[nCounter].FolderName){
        userGoogleAccount=rRange.getCell(userCounter,GOOGLE_ACCOUNT_COL).getValue();
        instrumentGroups[nCounter].NewViewers.push(userGoogleAccount);
        break;
      }
    }
  }

即使在第一次迭代之后,InstrumentGroups 中的每个条目都将填充用户的 Google 帐户。也许答案是仅在第二个循环中添加新用户数组,但我不知道如何实现这一点 - 它需要是一个数组,因为每个组中的新用户数量各不相同。

我怀疑这很简单,但我没有尝试解决它。我希望上面的解释足够清楚。

感谢您的帮助。

问候

arrays google-sheets google-apps-script multidimensional-array
1个回答
0
投票

我发现了问题:

此声明:

var newViewer=[];
创建一个空白数组。
此代码:
instrumentGroups.push({FolderName : childFolderName, ....., NewViewers : newViewer});
创建对 newViewer 数组的引用作为名为 NewViewers 的项目。 InstrumentsGroup 中的每个条目都具有相同的引用,因此 .push 语句会更新每个条目。

答案是更改为:

instrumentGroups.push({FolderName : childFolderName, ....., NewViewers : new Array()});
,它为每个条目创建一个新引用,随后的 .push 语句仅将信息添加到正确的数组中。

© www.soinside.com 2019 - 2024. All rights reserved.