根据优先级过滤字符串数组 javascript
filter array of strings based on priorities javascript
我有一个这样的对象:
const array = {
"clientName": "xyz",
"exp": 0,
"expiryInSeconds": 0,
"prefUserName": "admin-dev",
"roles": [
"dsis-users",
"fsas-dev"
],
"userId": "c8fa8f52-d626-4029-824c-f168c4c818d6"
};
根据优先级,我想过滤用户的角色
- 如果角色有“fsas-*”,则首先过滤该角色
- 如果“fsas-*”不存在,则过滤“dsis-users”角色(如果不存在,则添加并过滤该角色。
预期结果:
案例 1:
i/p:{
...
"roles": [ "dsis-users", "fsas-dev"]
}
o/p: ["fsas-dev"]
案例 2:
i/p:{
...
"roles": ["dsis-users", "dsis-admin" ]
}
or
i/p:{
...
"roles": [ "dsis-admin"]
}
o/p:["dsis-users"]
这是我尝试过的:
const roles = array.roles.filter(element => {
if (element.includes('fsas-')) {
return false;
}else if(element.includes('dsis-users')){
return false;
}else{
let a=['dsis-users'];
return a;
}
});
filter
遍历所有元素 - 你无法阻止它。
我认为这不是正确的方法,您应该使用 Array.find
或 Array.findIndex
来探测 roles
数组并确定它是否有以所需的前缀。
const array = {
"clientName": "xyz",
"exp": 0,
"expiryInSeconds": 0,
"prefUserName": "admin-dev",
"roles": [
"dsis-users",
"fsas-dev"
],
"userId": "c8fa8f52-d626-4029-824c-f168c4c818d6"
};
const fsas = array.roles.find(role => role.includes('fsas-'))
const dsis = array.roles.find(role => role.includes('dsis-users'))
const roles = [ fsas || dsis || 'dsis-users' ]
console.log(roles)
我有一个这样的对象:
const array = {
"clientName": "xyz",
"exp": 0,
"expiryInSeconds": 0,
"prefUserName": "admin-dev",
"roles": [
"dsis-users",
"fsas-dev"
],
"userId": "c8fa8f52-d626-4029-824c-f168c4c818d6"
};
根据优先级,我想过滤用户的角色
- 如果角色有“fsas-*”,则首先过滤该角色
- 如果“fsas-*”不存在,则过滤“dsis-users”角色(如果不存在,则添加并过滤该角色。
预期结果: 案例 1:
i/p:{
...
"roles": [ "dsis-users", "fsas-dev"]
}
o/p: ["fsas-dev"]
案例 2:
i/p:{
...
"roles": ["dsis-users", "dsis-admin" ]
}
or
i/p:{
...
"roles": [ "dsis-admin"]
}
o/p:["dsis-users"]
这是我尝试过的:
const roles = array.roles.filter(element => {
if (element.includes('fsas-')) {
return false;
}else if(element.includes('dsis-users')){
return false;
}else{
let a=['dsis-users'];
return a;
}
});
filter
遍历所有元素 - 你无法阻止它。
我认为这不是正确的方法,您应该使用 Array.find
或 Array.findIndex
来探测 roles
数组并确定它是否有以所需的前缀。
const array = {
"clientName": "xyz",
"exp": 0,
"expiryInSeconds": 0,
"prefUserName": "admin-dev",
"roles": [
"dsis-users",
"fsas-dev"
],
"userId": "c8fa8f52-d626-4029-824c-f168c4c818d6"
};
const fsas = array.roles.find(role => role.includes('fsas-'))
const dsis = array.roles.find(role => role.includes('dsis-users'))
const roles = [ fsas || dsis || 'dsis-users' ]
console.log(roles)