JavaScript-如何在对象数组中循环

JavaScript-如何在对象数组中循环,javascript,node.js,arrays,loops,keycloak,Javascript,Node.js,Arrays,Loops,Keycloak,我一直在研究keydepeadminrestapi方法,并且大部分方法都能正常工作。我能够使用在nodejs中读取的excel工作表创建用户和角色,而且效果很好。我能够列出所有用户和创建的所有角色。现在我要做的是使用逗号分隔的方法检查excel文件中是否存在角色,然后在excel文件中仅为用户分配角色方法 我将分享我的代码 函数读取用户和角色 let userRoleTobCreated = ReadFromExcel('./uploads/employees-roles.xlsx'); fun

我一直在研究keydepeadminrestapi方法,并且大部分方法都能正常工作。我能够使用在nodejs中读取的excel工作表创建用户和角色,而且效果很好。我能够列出所有用户和创建的所有角色。现在我要做的是使用逗号分隔的方法检查excel文件中是否存在角色,然后在excel文件中仅为用户分配角色方法

我将分享我的代码

函数读取用户和角色

let userRoleTobCreated = ReadFromExcel('./uploads/employees-roles.xlsx');
function ReadFromExcel() {
    let userRoleTobCreated = []
    xlsxFile(filename).then((rows) => {
        rows.forEach(row => {
            let userObject = {
                username: row[0],
                lastName: row[1],
                firstName: row[2],
                email: row[3],
                roles: row[4].split(",")
            }
            userRoleTobCreated.push(userObject);
        });
    })
    return userRoleTobCreated;
}

输出

在这里,我想检查employee excel文件,并根据我想分配给每个用户的列中的角色,每个角色都不起作用,只需将四个角色分配给前四个用户即可

函数调用

GetUser(userid, kc_accessToken).then((resp) => {
 userid = resp.data.map(userRoleTobCreated => userRoleTobCreated.id);

  GetRole(roleId, roleName, kc_accessToken).then((resp) => {
   roleId = resp.data.map(userRoleTobCreated => userRoleTobCreated.id);
   roleName = resp.data.map(userRoleTobCreated => userRoleTobCreated.name);

// Call Api to loop through each customer and assign each role to each customer
// this method just loops through the four role and assign it to the first four users only

      for (var i = 0; i < userid.length; i++) {
      AssignRole(userid[i], roleId[i], roleName[i], kc_clientUUID, kc_accessToken).then((resp) => {
                    })
                }
            })
        })

GetUser(userid,kc_accessToken)。然后((resp)=>{
userid=resp.data.map(userRoleTobCreated=>userRoleTobCreated.id);
GetRole(roleId、roleName、kc_accessToken)。然后((resp)=>{
roleId=resp.data.map(userRoleTobCreated=>userRoleTobCreated.id);
roleName=resp.data.map(userRoleTobCreated=>userRoleTobCreated.name);
//调用Api循环遍历每个客户,并将每个角色分配给每个客户
//此方法只是循环遍历四个角色,并仅将其分配给前四个用户
for(var i=0;i{
})
}
})
})
输出-每个用户的角色,而不是excel文件的指定方式


从KeyClope响应中,除了
用户ID
,您还需要它的
用户名,为什么?因为使用该
用户名
可以匹配从Excel检索的
用户名

GetUser(userid, kc_accessToken).then((resp) => {
 ...
 usernames = resp.data.map(userRoleTobCreated => userRoleTobCreated.username);
现在您有了用户的
ID
用户名
,这将分别用于在keydove上创建角色和匹配Excel内容

然后您必须从数组
用户名
中获取
用户名
,在
userRoleTobCreated
上搜索该
用户名
,并获取其
角色
。然后,您将向用户添加这些角色。为此,首先必须使用从Excel中提取的
角色名
,并在
角色名
数组中获取相应的索引。您将使用该索引从数组
roleId
获取
角色ID
。代码类似于:

// For each userID retrieved from Keycloak
for (var i = 0; i < userid.length; i++) {
    roles = []
    // Find the username and get its roles
    for (var j = 0; j < userRoleTobCreated.length; j++)
        if(usernames[i] == userRoleTobCreated[j].username){
           roles = userRoleTobCreated[j].roles
           break;  
        }

    // add each one of the roles
    for(var r = 0; r < roles.length; r++){
       role_pos = roleName.indexOf(role[r])
       role_id = roleId[role_pos]
       AssignRole(userid[i], role_id, role[r], kc_clientUUID, kc_accessToken)...
    }
};
//对于从KeyClope检索到的每个用户ID
for(var i=0;i
现在请记住,我不知道JavaScript、Node.js等等。因此,这个伪代码可能需要一些修改,可能是在更好的习惯用法和性能方面。尽管如此,算法仍然存在


我还将您的一些变量
userid
roleId
roleName
分别重命名为
userid
roleIDs
roleNames
。原始名称使代码有点难以理解,而且也有误导性。

您太好了,再次感谢您。干杯