Javascript 如何按键对对象数组进行分组?

Javascript 如何按键对对象数组进行分组?,javascript,logic,lodash,Javascript,Logic,Lodash,如何通过对象键对对象数组进行分组,以基于分组创建新的对象数组? 例如,我有一个汽车对象数组: const array = [ {red: [ {height: 50} ]}, {green: [ {height: 20} ]}, {blue: [ {height: 30} ]}, {blue: [ {height: 40} ]}, {red: [ {height: 10} ]}, {green: [ {height: 60} ]} ] 我想创建一个新的对象数组。(关键是

如何通过对象键对对象数组进行分组,以基于分组创建新的对象数组? 例如,我有一个汽车对象数组:

const array = [
  {red: [ {height: 50} ]},
  {green: [ {height: 20} ]},
  {blue: [ {height: 30} ]},
  {blue: [ {height: 40} ]},
  {red: [ {height: 10} ]},
  {green: [ {height: 60} ]}
]
我想创建一个新的对象数组。(关键是颜色)


我尝试使用lodash.groupBy,但我根本不知道如何解决这个问题。

使用array reduce可以迭代数据并计算结果对象

const数组=[
{‘红色’:[{高度:50}]},
{‘绿色’:[{高度:20}]},
{'blue':[{height:30}]},
{'blue':[{height:40}]},
{‘红色’:[{高度:10}]},
{‘绿色’:[{高度:60}]}
];
const res=数组。reduce((acc,element)=>{
//提取键和高度值数组
const[key,heightValue]=Object.entries(元素)[0];
//获取或创建(如果不存在),并从数组、索引0中推送高度值
(acc[键]| |(acc[键]=[]))。按(高度值[0]);
返回acc;
}, {});

控制台日志(res)使用array reduce可以迭代数据并计算结果对象

const数组=[
{‘红色’:[{高度:50}]},
{‘绿色’:[{高度:20}]},
{'blue':[{height:30}]},
{'blue':[{height:40}]},
{‘红色’:[{高度:10}]},
{‘绿色’:[{高度:60}]}
];
const res=数组。reduce((acc,element)=>{
//提取键和高度值数组
const[key,heightValue]=Object.entries(元素)[0];
//获取或创建(如果不存在),并从数组、索引0中推送高度值
(acc[键]| |(acc[键]=[]))。按(高度值[0]);
返回acc;
}, {});
控制台日志(res)您可以使用lodash组合具有相同键的对象,然后使用将其转换回数组:

const数组=[{“红色”:[{“高度”:50}]},{“绿色”:[{“高度”:20}]},{“蓝色”:[{“高度”:30}]},{“蓝色”:[{“高度”:40}]},{“红色”:[{“高度”:10}]},{“绿色”:[{“高度”:60}]
常数fn=u0.flow([
arr=>u0.mergeWith({},…arr,(o,s)=>0.isArray(o)?o.concat(s):s),
objs=>ujs.map(objs,(v,k)=>({[k]:v}))
])
常量结果=fn(数组)
console.log(结果)
您可以使用lodash组合具有相同键的对象,然后使用将其转换回数组:

const数组=[{“红色”:[{“高度”:50}]},{“绿色”:[{“高度”:20}]},{“蓝色”:[{“高度”:30}]},{“蓝色”:[{“高度”:40}]},{“红色”:[{“高度”:10}]},{“绿色”:[{“高度”:60}]
常数fn=u0.flow([
arr=>u0.mergeWith({},…arr,(o,s)=>0.isArray(o)?o.concat(s):s),
objs=>ujs.map(objs,(v,k)=>({[k]:v}))
])
常量结果=fn(数组)
console.log(结果)

第一个就是按照OP的要求起诉lodash@mplungjan所有重复项似乎都是按键值分组的,而不是按键名分组的。嘿,这不是重复问题。仔细看我的问题。我在移动atm上,但诀窍是使用
Object.keys(item)[0]
获取keyname以进行分组。-似乎很接近被接受的答案第一个就是按照OP的要求起诉lodash@mplungjan所有重复项似乎都是按键值分组的,而不是按键名分组的。嘿,这不是重复问题。仔细看我的问题。我在移动atm上,但诀窍是使用
Object.keys(item)[0]
获取keyname以进行分组。-看起来非常接近被接受的答案看起来很像我建议的傻瓜中的一个答案——更优雅但非常接近是的,你是对的。我通过引用url创建了我的问题。因为我的英语很差。然而,我的问题不是重复的。看起来很像我建议的重复中的一个答案——更优雅但非常接近是的,你是对的。我通过引用url创建了我的问题。因为我的英语很差。然而,我的问题不是重复的,它比简单的js代码更适合我的情况。谢谢它比简单的js代码更适合我的情况。谢谢
const result = [
  {red: [{height: 50}, {height: 10}]},
  {green: [{height: 20}, {height: 60}]},
  {blue: [{height: 30}, {height: 40}]}
]