JavaScript-如何在对象数组中循环
我一直在研究keydepeadminrestapi方法,并且大部分方法都能正常工作。我能够使用在nodejs中读取的excel工作表创建用户和角色,而且效果很好。我能够列出所有用户和创建的所有角色。现在我要做的是使用逗号分隔的方法检查excel文件中是否存在角色,然后在excel文件中仅为用户分配角色方法 我将分享我的代码 函数读取用户和角色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
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
。原始名称使代码有点难以理解,而且也有误导性。您太好了,再次感谢您。干杯