Javascript 如何按id数组分组

Javascript 如何按id数组分组,javascript,arrays,reduce,Javascript,Arrays,Reduce,大家好,你们能帮我减少阵列吗。我有两个数组,我需要在中间将其中一个数组分组。在这里,您可以找到示例 我有一个对象数组 const arr = [{ mid: 888, name: "test" }, { mid: 888, name: "test1" }, { mid: 888, name: "test2" }, { mid: 777, name: "test10" }, ] 但我需要一个小组,在中期前

大家好,你们能帮我减少阵列吗。我有两个数组,我需要在中间将其中一个数组分组。在这里,您可以找到示例

我有一个对象数组

const arr = [{
    mid: 888,
    name: "test"
  },
  {
    mid: 888,
    name: "test1"
  },
  {
    mid: 888,
    name: "test2"
  },
  {
    mid: 777,
    name: "test10"
  },
]
但我需要一个小组,在中期前得到这样的东西

const arr = [{
    mid: 888,
    projects: [{
        name: "test"
      },
      {
        name: "test1"
      },
      {
        name: "test2"
      },
    ]
  },
  {
    mid: 777,
    projects: [{
      name: "test10"
    }, ]
  }
]
const arr=[{
中期:888,
名称:“测试”
},
{
中期:888,
名称:“test1”
},
{
中期:888,
名称:“test2”
},
{
年中:777,
名称:“test10”
}
];
让newArray=[]
arr.map(item=>item.mid).filter((值、索引、self)=>{
返回self.indexOf(value)==索引;
}).forEach((mid)=>{
newArray.push({
中间,
项目:arr.filter(item=>item.mid==mid).map(item=>{return{name:item.name};})
})
})

console.log(newArray)
这不是最快的方法,但通过试验代码片段,可能有助于更好地理解reduce函数)

让arr=[{
中期:888,
名称:“测试”
},
{
中期:888,
名称:“test1”
},
{
中期:888,
名称:“test2”
},
{
年中:777,
名称:“test10”
},
]
let reduced=arr.reduce((上一个,现在)=>{
//第一次迭代,prev==[]
//现在=={mid:888,name:'test'}
让index=prev.map(e=>e.mid).indexOf(now.mid);
if(~index){//if找到索引
prev[index].projects.push({
姓名:now.name
})
}否则{
上推({
现在,现在,
项目:[{
姓名:now.name
}]
})
}
返回上一个;
}, []); /* 从空数组开始*/

控制台日志(减少)您可以这样对它进行分组

var groupedData = _.mapValues(_.groupBy(arr, 'mid'),
                      clist => clist.map(car => _.omit(car, 'mid')));
结果将是

{888: [{
    name: test
  },
  {
    name: test1
  },
  {
    name: test2
  },
],
777: [{
  name: test10
} ]}

下面是一个
reduce
函数如何使用
filter
和三元大小写实现这一功能:

const arr=[{mid:888,name:“test”},
{mid:888,名称:“test1”},
{mid:888,名称:“test2”},
{mid:777,名称:“test10}];
设newArray=arr.reduce(函数(r,行){
设dt=r.filter(x=>x.mid==row.mid);
dt.length?dt[0].projects.push(row.name):r.push({mid:row.mid,projects:[row.name]});
返回r;
}, []);
log(newArray)