如何通过属性将对象数组分组为ARRAYS数组?

问题描述

我有一个具有共同属性的对象数组。例如

[{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)

Object.values()

,

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'));