練習分為 A 和 B 兩部分。
A 很簡單,它需要檢查每個用戶使用的模塊并回傳一個具有以下格式的物件。這部分解決了。
{
'auth_module': {
'authn.provider_1': ['./u1.json', './u2.json']
'authn.provider_2': ['./u3.json', './u4.json', './u5.json']
},
'content_module': {
'authz.provider_1': ['./u1.json', './u3.json'],
'authz.provider_2': ['./u2.json', './u4.json'],
'authz.provider_3': ['./u5.json']
}
}
現在,部分 BI 需要幫助來解決這個問題:
“確定一組用戶(取自 A 部分)一起使用所有可用模塊”
示例輸出采用以下格式:
['./u1.json', './u4.json', './u5.json']
我真的不知道如何解決這個問題,所以任何形式的幫助都將不勝感激。
uj5u.com熱心網友回復:
- 使用
Object#entriesand ,在更新目標用戶串列時Array#reduce迭代這些對auth_module- 在每次迭代中,決議提供者 ID 并獲取該提供者的內容用戶串列(如果有)
- 使用
Array#forEach, 遍歷當前 auth 用戶并使用兩者之間的共同用戶更新目標串列
- 如果只有內容提供者,我們還需要將用戶推送到串列中。使用
Object#entriesandArray#forEach,遍歷content_module對- 在每次迭代中,檢查當前提供者 ID 是否不在
auth_module添加其用戶的串列中
- 在每次迭代中,檢查當前提供者 ID 是否不在
- 最后,使用回傳唯一用戶串列
Set
const _getUsers = modules => {
const authIdPrefix = 'authn.', contentIdPrefix = 'authz.';
const { 'auth_module': authModule, 'content_module': contentModule } = modules;
const users = Object.entries(authModule)
.reduce((list, [authProvider, authUsers]) => {
const providerId = authProvider.substring(authIdPrefix.length);
const contentUsers = contentModule[`${contentIdPrefix}${providerId}`] ?? [];
authUsers.forEach(user => {
if(contentUsers.includes(user)) {
list.push(user);
}
});
return list;
}, []);
Object.entries(contentModule)
.forEach(([contentProvider, contentUsers]) => {
const providerId = contentProvider.substring(contentIdPrefix.length);
if(!authModule[`${authIdPrefix}${providerId}`]) {
users.push(...contentUsers);
}
});
return [...new Set(users)];
}
const modules = {
'auth_module': {
'authn.provider_1': ['./u1.json', './u2.json'],
'authn.provider_2': ['./u3.json', './u4.json', './u5.json']
},
'content_module': {
'authz.provider_1': ['./u1.json', './u3.json'],
'authz.provider_2': ['./u2.json', './u4.json'],
'authz.provider_3': ['./u5.json']
}
};
console.log( _getUsers(modules) );
uj5u.com熱心網友回復:
我將假設 A 部分物件中的鍵是動態創建的,
所以你需要做的就是簡單地遍歷元素并嘗試將它添加到陣列中,在添加之前你需要檢查它是否在陣列中,或者像這樣:
const data = []
function getBresult(objectA){
for(const element in objectA){
if(Array.isArray(objectA[element])){
objectA[element].forEach(element => {
if(data.indexOf(element) === -1) data.push(element)
})
}
else getBresult(objectA[element])
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/462538.html
標籤:javascript 数组 json 目的
下一篇:如何合并具有空字串值的物件?
