null
{
role:'admin',
resource:['calendar','appraisal'],
action:['create:any','read:any','update:any','delete:any']
}
{
role:'user',
resource:['calendar','appraisal'],
action:['create:own','read:any','update:own','delete:own']
}
变成这个:
[
{role: 'admin', resource: 'calendar', action: 'create:any'},
{role: 'admin', resource: 'calendar', action: 'read:any'},
{role: 'admin', resource: 'calendar', action: 'update:any'},
{role: 'admin', resource: 'calendar', action: 'delete:any'},
{role: 'user', resource: 'calendar', action: 'create:own'},
{role: 'user', resource: 'calendar', action: 'read:any'},
{role: 'user', resource: 'calendar', action: 'update:own'},
{role: 'user', resource: 'calendar', action: 'delete:own'},
]
我用不同的方法尝试了array.map()方法,但仍然没有成功。如有任何答案我将不胜感激。谢啦!
您可以使nestarray.flatMap()
调用(最后一个可以只是map)迭代数组(resource
,action
)并生成一个扁平的对象数组:
null
const arr = [{
role: 'admin',
resource: ['calendar', 'appraisal'],
action: ['create:any', 'read:any', 'update:any', 'delete:any']
}, {
role: 'user',
resource: ['calendar', 'appraisal'],
action: ['create:own', 'read:any', 'update:own', 'delete:own']
}]
const result = arr.flatMap(({ resource: res, action: act, ...obj }) =>
res.flatMap(resource =>
act.map(action => ({
...obj,
resource,
action,
}))
)
)
console.log(result)
null
null
const data = [{
role:'admin',
resource:['calendar','appraisal'],
action:['create:any','read:any','update:any','delete:any']
},
{
role:'user',
resource:['calendar','appraisal'],
action:['create:own','read:any','update:own','delete:own']
}];
const mapped = data.flatMap(({role, resource, action}) =>
resource.flatMap(resource =>
action.map(action => ({role, resource, action}))));
console.log(mapped)
null
const json = [
{
role:'admin',
resource:['calendar','appraisal'],
action:['create:any','read:any','update:any','delete:any']
},
{
role: 'user',
resource:['calendar','appraisal'],
action:['create:own','read:any','update:own','delete:own']
}
];
const getOutput = (arr) => {
return arr.reduce((acc, cur) => {
const roleOutput = cur.action.reduce((actionAcc, actionCur) =>
[
...actionAcc,
...cur.resource.map(resVal => ({
role: cur.role,
resource: resVal,
action: actionCur
}))
]
, []);
return [...roleOutput, ...acc];
}, []);
}
console.log(getOutput(json));