问题描述
[{color:"red",name:"basher"},{color:"blue",name:"tony"},{color:"red",name:"bobo"},name:"pina"}]
所需的输出是如下数组的数组-
[[{color:"red",name:"bobo"}],[{color:"blue",name:"pina"}]]
我发现了这个问题slightly similar question,但是它将数组拆分为带有键的对象。我不要钥匙。我只想将对象数组拆分为每个包含具有相似属性的对象的数组。
解决方法
分组后,您只需要抓住values
const array = [
{ color: "red",name: "basher" },{ color: "blue",name: "tony" },{ color: "red",name: "bobo" },name: "pina" },]
const res = Object.values(
array.reduce((acc,el) => {
if (acc[el.color] !== undefined) {
acc[el.color].push(el)
} else {
acc[el.color] = [el]
}
return acc
},{})
)
console.log(res)
,
groupBy的原理基本相同....您需要一个使用公用值作为键的对象或Map,然后对该键的值进行分组/处理。然后获取所有Map或Object值作为结果
使用地图的示例
const data = [{color:"red",name:"basher"},{color:"blue",name:"tony"},{color:"red",name:"bobo"},name:"pina"}],group = data.reduce((a,c) => a.set( c.color,[...(a.get(c.color) || []),c]),new Map),res = [...group.values()]
console.log(res)
,
const arr = [{
color: "red",name: "basher"
},{
color: "blue",name: "tony"
},{
color: "red",name: "bobo"
},name: "pina"
}];
const groupObjects = (arr,prop) => {
const result = [];
const values = [...new Set(arr.map(obj => obj[prop]))];
values.forEach(value => result.push(arr.filter(obj => obj[prop] === value)));
return result;
};
console.log(groupObjects(arr,'color'));