首页 > 解决方案 > 过滤和组合具有相同属性的对象数组中的索引

问题描述

试图找出在 JS 中获取一组对象并根据共享属性值组合其索引属性的最佳实践。

基本上,我有一组用户申请了某个类,其中用户申请的类是一个数组。然而,同一个用户申请的每一个类都是它自己独立的索引。目标是将用户的所有类组合在一个索引(数组)中,而不是重复。

前任。

let someArray = [
    {
        name: 'Jim',
        class: [
            {
                name: 'Sports Journalism',
                field: 'Journalism'
            }
        ]
    },
    {
        name: 'Pam',
        class: [
            {
                name: 'Fine Arts',
                field: 'Art'
            }
        ]
    },
    {
        name: 'Jim',
        class: [
            {
                name: 'Sales 101',
                field: 'Business'
            }
        ]
    }
]
// something like this where we would want all of Jim's
// classes to be in one class array on just one index

标签: javascriptarraysobjectecmascript-6filter

解决方案


使用reduce

let someArray = [{name:'Jim',class:[{name:'Sports Journalism',field:'Journalism'}]},{name:'Pam',class:[{name:'Fine Arts',field:'Art'}]},{name:'Jim',class:[{name:'Sales 101',field:'Business'}]}];
const res = Object.values(someArray.reduce((acc, { name, class: [...classObj] }) => {
  (acc[name] = acc[name] || { name, class: [] }).class.push(classObj);
  return acc;
}, {}));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }


推荐阅读