Javascript 按值对对象进行分组

标签 javascript arrays json lodash

首先,我需要根据策略属性的值对对象数组进行分组。然后我需要对操作和公司字段进行分组。我尝试使用 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/

相关文章:

javascript - 将 [op.and] 添加到 Sequelize 查询对象

javascript - jQuery insertAfter 添加 2 个相同的元素

python - 集成依赖于两个数组的函数

javascript - 如果对象在另一个数组中具有匹配值,则 react 更新对象数组

c# - 在具有动态对象名称的 JSON 上使用 JsonConvert.DeserializeObject

javascript - vue.js 和 laravel 使用 vuetify 进行简单表单提交

javascript - 使用 html5/javascript 将键盘设置为即使在 "go"按下时也保持打开状态?

javascript - 返回对象数组

json - 当 'auto' 将数据从 S3 加载到 Redshift 表时,大小写是否重要?

JQUERY JSON AJAX 可以离线工作,但不能在线工作