【问题标题】:Access objects in array list访问数组列表中的对象
【发布时间】:2018-06-12 19:59:37
【问题描述】:

我正在尝试使用 javascript 访问数组列表中的对象,数组列表是:

membersList:{
    "kind":"admin#directory#users",
    "users":[{"orgUnitPath":"/",
        "isMailboxSetup":true,
        "id":"1076823423424234",
        "isAdmin":false,
        "suspended":false,
        "isDelegatedAdmin":false,
        "isEnforcedIn2Sv":false,
        "etag":"\"npJcgsdfsadfsfsff\"",
        "ipWhitelisted":false,"changePasswordAtNextLogin":true,
        "customerId":"C01looera",
        "includeInGlobalAddressList":true,
        "lastLoginTime":"1970-01-01T00:00:00.000Z",
        "primaryEmail":"ilda.donofrio@domain.org",
        "isEnrolledIn2Sv":false,"kind":"admin#directory#user",
        "name":{"givenName":"ilda",
            "familyName":"donofrio",
            "fullName":"ilda donofrio"},
            "creationTime":"2018-06-10T11:56:45.000Z",
            "emails":[{"address":"ilda.donofrio@domain.org",
            "primary":true}],
            "agreedToTerms":true
            }],
        "etag":"\"npJcgsdfsadfsfsff/npJcgsdfsadfsfsff\"

    }

我正在尝试从此列表中访问primary email,我为此编写了代码,即

for (var j in membersList) {
       var member = membersList[j];
       Logger.log('member Email:' + member);
    }

这只是返回我

[18-06-12 15:39:55:982 EDT] member Email:admin#directory#users

[18-06-12 15:39:55:982 EDT] member Email:{"orgUnitPath":"/","isMailboxSetup":true,"id":"1076823423424234","isAdmin":false,"suspended":false,"isDelegatedAdmin":false,"isEnforcedIn2Sv":false,"etag":"\"npJcgsdfsadfsfsff\"","ipWhitelisted":false,"changePasswordAtNextLogin":false,"customerId":"C01looera","includeInGlobalAddressList":true,"lastLoginTime":"1970-01-01T00:00:00.000Z","primaryEmail":"ilda.donofrio@domain.org","isEnrolledIn2Sv":false,"kind":"admin#directory#user","name":{"givenName":"ilda","familyName":"donofrio","fullName":"ilda donofrio"},"creationTime":"2018-06-10T11:56:45.000Z","emails":[{"address":"ilda.donofrio@domain.org","primary":true}],"agreedToTerms":true}

[18-06-12 15:39:55:983 EDT] member Email:"npJcgsdfsadfsfsff/npJcgsdfsadfsfsff\"

当我尝试使用时:

Logger.log('member Email:' + member.primaryEmail);

它的投掷:

[18-06-12 16:02:53:630 EDT] member Email:undefined
[18-06-12 16:02:53:630 EDT] member Email:undefined
[18-06-12 16:02:53:631 EDT] member Email:undefined

有没有办法使用脚本仅提取 primaryEmail 的值?我是 javascript 和 google 脚本的新手,所以如果这是一个愚蠢的问题,请原谅我。

【问题讨论】:

  • 那不是“数组列表”。那是一个对象的一个​​键,它存储另一个对象作为该键的值。

标签: javascript google-apps-script google-workspace


【解决方案1】:

您应该遍历成员列表对象中的所有users,然后检索每个用户的primaryEmail。目前,您正在迭代 membersList 对象的所有属性(即键,其中一个是 users)。

举个例子:

membersList['users'].forEach((user) => {
  Logger.log('member Email: ' + user['primaryEmail']);
}

迭代方式由你决定,我只是倾向于在 JS 中使用.forEach

【讨论】:

    【解决方案2】:

    您可以使用membersList.users[0].primaryEmail 访问主电子邮件。

    此外,在最后一位 ("etag":"\"npJcgsdfsadfsfsff/npJcgsdfsadfsfsff\") 上,最后一个 \ 退出字符串,但它不应该退出,因此请尝试将其删除。

    var membersList = {
        "kind":"admin#directory#users",
        "users":[{"orgUnitPath":"/",
            "isMailboxSetup":true,
            "id":"1076823423424234",
            "isAdmin":false,
            "suspended":false,
            "isDelegatedAdmin":false,
            "isEnforcedIn2Sv":false,
            "etag":"\"npJcgsdfsadfsfsff\"",
            "ipWhitelisted":false,"changePasswordAtNextLogin":true,
            "customerId":"C01looera",
            "includeInGlobalAddressList":true,
            "lastLoginTime":"1970-01-01T00:00:00.000Z",
            "primaryEmail":"ilda.donofrio@domain.org",
            "isEnrolledIn2Sv":false,"kind":"admin#directory#user",
            "name":{"givenName":"ilda",
                "familyName":"donofrio",
                "fullName":"ilda donofrio"},
                "creationTime":"2018-06-10T11:56:45.000Z",
                "emails":[{"address":"ilda.donofrio@domain.org",
                "primary":true}],
                "agreedToTerms":true
                }],
            "etag":"\"npJcgsdfsadfsfsff/npJcgsdfsadfsfsff"
    
        }
        
    console.log(membersList.users[0].primaryEmail);

    【讨论】:

      【解决方案3】:

      要访问primaryEmail,请尝试使用membersList["users"]["primaryEmail"]

      【讨论】:

        【解决方案4】:

        在谷歌应用脚​​本中对我有用的唯一答案是:

        for (var j in membersList) {
               var member = membersList[j];
               for (var k in member){        
                 var user =  member[k];
                 var memberEmail = user.primaryEmail;
                 var lastLoginTime = user.lastLoginTime;
               } 
            }
            Logger.log('member Email:' + memberEmail);
            Logger.log('last Login Time:' + lastLoginTime);
        

        我尝试了此处发布的所有方法,但均未成功,但正如 @AllenG 所引用的,我只需要遍历成员列表对象中的所有 users。非常感谢您的所有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-31
          • 1970-01-01
          • 2017-07-24
          • 1970-01-01
          • 2017-09-06
          • 2023-03-30
          相关资源
          最近更新 更多