首先,我需要根据策略属性的值对对象数组进行分组。然后我需要对操作和公司字段进行分组。我尝试使用 lodash 但无法访问嵌套数组。
从此=>
[
{
"action": "VIEW",
"policy": "FORM"
},
{
"action": "CREATE",
"policy": "USER"
},
{
"action": "VIEW",
"policy": "USER"
},
{
"company": "Microsoft",
"policy": "FORM"
},
{
"company": "Facebook",
"policy": "USER"
},
{
"company": "Twitter",
"policy": "USER"
}
]
到此=>
{
"FORM": {
"action": ["VIEW"],
"company": ["Microsoft"]
},
"USER": {
"action": ["CREATE", "VIEW"],
"company": ["Facebook", "Twitter"]
}
}
非常感谢
最佳答案
您可以使用简单的 for...of
来完成此操作循环和一些destructuring
:
const data = [ { action: 'VIEW', policy: 'FORM', }, { action: 'CREATE', policy: 'USER', }, { action: 'VIEW', policy: 'USER', }, { company: 'Microsoft', policy: 'FORM', }, { company: 'Facebook', policy: 'USER', }, { company: 'Twitter', policy: 'USER', }, ];
let result = {};
for (const { action, policy, company } of data) {
result[policy] = result[policy] ?? { action: [], company: [] };
if (action) result[policy].action.push(action);
if (company) result[policy].company.push(company);
}
console.log(result);
您还可以使用 array#reduce
来执行此操作而不是 for 循环:
const data = [ { action: 'VIEW', policy: 'FORM' }, { action: 'CREATE', policy: 'USER' }, { action: 'VIEW', policy: 'USER' }, { company: 'Microsoft', policy: 'FORM' }, { company: 'Facebook', policy: 'USER' }, { company: 'Twitter', policy: 'USER' }, ];
const result = data.reduce((result, { action, company, policy }) => {
result[policy] = result[policy] ?? { action: [], company: [] };
action && result[policy].action.push(action);
company && result[policy].company.push(company);
return result;
}, {});
console.log(result);
关于Javascript 按值对对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69866834/