我有一个从服务器返回的列表对象,例如:
{
"items": [
{
"id": 1,
"role": "SYSTEM_ADMIN"
},
{
"id": 2,
"role": "SYSTEM"
},
{
"id": 3,
"role": "USER"
}
]
}
这里的问题是我想按照上述条件设置上述json中每个对象的等级值:
示例:
{
"items": [
{
"id": 1,
"role": "SYSTEM_ADMIN",
"rank": 3
},
{
"id": 2,
"role": "SYSTEM",
"rank": 2
},
{
"id": 3,
"role": "USER",
"rank": 1
},
{
"id": 4,
"role": "SYSTEM",
"rank": 2
}
]
}
我如何使用javascript快速设置对象的等级值,如果没有太多的话?谢谢大家
正如某些人建议的那样,创建响应时最好在服务器上进行。
如果由于某种原因仍需要在前端进行此操作,则可以创建一个常量映射,将每个角色值的排名存储在对象映射中:
const rankMap = {
SYSTEM_ADMIN: 3,
SYSTEM: 2,
USER: 1
};
const data = {
"items": [{
"id": 1,
"role": "SYSTEM_ADMIN"
},
{
"id": 2,
"role": "SYSTEM"
},
{
"id": 3,
"role": "USER"
}
]
}
data.items = data.items.map(item => ({
...item,
rank: rankMap[item.role],
}));
console.log(data);
您可以创建一个包含rank
的对象,然后只使用map
:
let ranks = {SYSTEM_ADMIN: 3, SYSTEM: 2, USER: 1};
let result = items.map(({id, role})=> ({id, role, rank: ranks[role]}));
示例:
let items = [
{
"id": 1,
"role": "SYSTEM_ADMIN"
},
{
"id": 2,
"role": "SYSTEM"
},
{
"id": 3,
"role": "USER"
}
];
let ranks = {SYSTEM_ADMIN: 3, SYSTEM: 2, USER: 1};
let result = items.map(({id, role})=> ({id, role, rank: ranks[role]}));
console.log(result)
我将在字典中列出角色及其各自的等级。然后可以非常简单地映射响应]
let response = {
items: [
{
"id": 1,
"role": "SYSTEM_ADMIN",
},
{
"id": 2,
"role": "SYSTEM",
},
{
"id": 3,
"role": "USER",
},
{
"id": 4,
"role": "SYSTEM",
}
]
}
let rankMap = {
"SYSTEM_ADMIN": 3,
"SYSTEM": 2,
"USER": 1
}
response.items.forEach(i => i['rank'] = rankMap[i.role]);
console.log(response);