首先,我需要根據策略屬性的值對一組物件進行分組。然后我需要對操作和公司欄位進行分組。我嘗試使用 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"]
}
}
非常感謝
uj5u.com熱心網友回復:
你可以使用一個簡單的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);
uj5u.com熱心網友回復:
const groupBy = (x, f) => x.reduce((a, b) => ((a[f(b)] ||= []).push(b), a), {})
// by this function you can group by any field value .
// for group by policy
groupBy(data, v => v.policy)
uj5u.com熱心網友回復:
您可以分組policy并分隔陣列的其余部分并構建嵌套組。
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" }],
result = Object.values(data.reduce((r, { policy, ...o }) => {
r[policy] ??= {};
Object
.entries(o)
.forEach(([k, v]) => (r[policy][k] ??= []).push(v));
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351007.html
標籤:javascript 数组 json 洛达什
上一篇:通過console.log([...mapObject.entries()])將類似于控制臺輸出的映射轉換為字串
下一篇:迭代串列問題
