Javascript 如何按公共属性对对象数组进行分组并将其他属性放在一起

Javascript 如何按公共属性对对象数组进行分组并将其他属性放在一起,javascript,arrays,object,ecmascript-6,reduce,Javascript,Arrays,Object,Ecmascript 6,Reduce,我有一个像这样的对象数组 const statuses = [ {time: '21/1/1990', 'Status.sold': 8848}, {time: '21/1/1990', 'Status.reserved': 8804}, {time: '21/1/1991', 'Status.reserved': 8756}, {time: '21/1/1991', 'Status.sold': 8732}, {time: '21/1/1992', 'Status.kill

我有一个像这样的对象数组

const statuses = [
  {time: '21/1/1990', 'Status.sold': 8848},
  {time: '21/1/1990', 'Status.reserved': 8804},
  {time: '21/1/1991', 'Status.reserved': 8756},
  {time: '21/1/1991', 'Status.sold': 8732},
  {time: '21/1/1992', 'Status.killed': 8691},
  {time: '21/1/1992', 'Status.sold': 8620},
  {time: '21/1/1993', 'Status.held': 8511},
  {time: '21/1/1993', 'Status.killed': 8511},
  {time: '21/1/1994', 'Status.sold': 8498},
];
const statuses = [
  {time: '21/1/1990', sold: 8848, killed: 0, reserved: 8804, held: 0},
  {time: '21/1/1991', sold: 8732, killed: 0, reserved: 8756, held: 0},
  {time: '21/1/1992', sold: 8620, killed: 8691, reserved: 0, held: 0},
  {time: '21/1/1993', sold: 0, killed: 8511, reserved: 0, held: 8511},
  {time: '21/1/1994', sold: 8498, killed: 0, reserved: 0, held: 0},
];
const result = statuses.map((obj) => {
   return { ...obj, 
      sold: obj['Status.sold'] ? obj['Status.sold'] : 0,
      reserved: obj['Status.reserved'] ? obj['Status.reserved'] : 0,
      killed: obj['Status.killed'] ? obj['Status.killed'] : 0,
      held: obj['Status.held'] ? obj['Status.held'] : 0
   };
});
我试图实现的是将所有
状态。
属性放在一起,并按
时间
属性分组,这对于所有对象都是通用的。所以最终的结果是这样的

const statuses = [
  {time: '21/1/1990', 'Status.sold': 8848},
  {time: '21/1/1990', 'Status.reserved': 8804},
  {time: '21/1/1991', 'Status.reserved': 8756},
  {time: '21/1/1991', 'Status.sold': 8732},
  {time: '21/1/1992', 'Status.killed': 8691},
  {time: '21/1/1992', 'Status.sold': 8620},
  {time: '21/1/1993', 'Status.held': 8511},
  {time: '21/1/1993', 'Status.killed': 8511},
  {time: '21/1/1994', 'Status.sold': 8498},
];
const statuses = [
  {time: '21/1/1990', sold: 8848, killed: 0, reserved: 8804, held: 0},
  {time: '21/1/1991', sold: 8732, killed: 0, reserved: 8756, held: 0},
  {time: '21/1/1992', sold: 8620, killed: 8691, reserved: 0, held: 0},
  {time: '21/1/1993', sold: 0, killed: 8511, reserved: 0, held: 8511},
  {time: '21/1/1994', sold: 8498, killed: 0, reserved: 0, held: 0},
];
const result = statuses.map((obj) => {
   return { ...obj, 
      sold: obj['Status.sold'] ? obj['Status.sold'] : 0,
      reserved: obj['Status.reserved'] ? obj['Status.reserved'] : 0,
      killed: obj['Status.killed'] ? obj['Status.killed'] : 0,
      held: obj['Status.held'] ? obj['Status.held'] : 0
   };
});
我试过这样的东西

const statuses = [
  {time: '21/1/1990', 'Status.sold': 8848},
  {time: '21/1/1990', 'Status.reserved': 8804},
  {time: '21/1/1991', 'Status.reserved': 8756},
  {time: '21/1/1991', 'Status.sold': 8732},
  {time: '21/1/1992', 'Status.killed': 8691},
  {time: '21/1/1992', 'Status.sold': 8620},
  {time: '21/1/1993', 'Status.held': 8511},
  {time: '21/1/1993', 'Status.killed': 8511},
  {time: '21/1/1994', 'Status.sold': 8498},
];
const statuses = [
  {time: '21/1/1990', sold: 8848, killed: 0, reserved: 8804, held: 0},
  {time: '21/1/1991', sold: 8732, killed: 0, reserved: 8756, held: 0},
  {time: '21/1/1992', sold: 8620, killed: 8691, reserved: 0, held: 0},
  {time: '21/1/1993', sold: 0, killed: 8511, reserved: 0, held: 8511},
  {time: '21/1/1994', sold: 8498, killed: 0, reserved: 0, held: 0},
];
const result = statuses.map((obj) => {
   return { ...obj, 
      sold: obj['Status.sold'] ? obj['Status.sold'] : 0,
      reserved: obj['Status.reserved'] ? obj['Status.reserved'] : 0,
      killed: obj['Status.killed'] ? obj['Status.killed'] : 0,
      held: obj['Status.held'] ? obj['Status.held'] : 0
   };
});

但我不知道如何按时间对它们进行分组。如何将reduce方法与此代码结合?提前谢谢

您可以按时间对对象进行分组

const
状态=[{time:'21/1/1990','Status.selled':8848},{time:'21/1/1990','Status.reserved':8804},{time:'21/1/1991','Status.reserved':8756},{time:'21/1/1991','Status.selled':8732},{time:'21/1/1992','Status.killed':8691},{time:'21/1/1992','Status.selled':8620},{time:'21/1/1993','Status.hold''8511},{time:'21/1/1993','Status.killed':8511},{time:'21/1/1994','Status.selled':8498},
result=Object.values(status.reduce((r,{time,…o})=>{
r[time]??={time,卖出:0,杀死:0,保留:0,持有:0};
Object.entries(o.forEach([k,v])=>r[time][k.slice(7)]+=v;
返回r;
}, {}));
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
您可以使用对象按
时间进行分组

const
状态=[{time:'21/1/1990','Status.selled':8848},{time:'21/1/1990','Status.reserved':8804},{time:'21/1/1991','Status.reserved':8756},{time:'21/1/1991','Status.selled':8732},{time:'21/1/1992','Status.killed':8691},{time:'21/1/1992','Status.selled':8620},{time:'21/1/1993','Status.hold''8511},{time:'21/1/1993','Status.killed':8511},{time:'21/1/1994','Status.selled':8498},
result=Object.values(status.reduce((r,{time,…o})=>{
r[time]??={time,卖出:0,杀死:0,保留:0,持有:0};
Object.entries(o.forEach([k,v])=>r[time][k.slice(7)]+=v;
返回r;
}, {}));
console.log(结果);
。作为控制台包装{max height:100%!重要;top:0;}
尝试以下操作:

const状态=[
{时间:'21/1/1990','Status.selled':8848},
{时间:'21/1/1990','Status.reserved':8804},
{时间:'21/1/1991','Status.reserved':8756},
{时间:'21/1/1991','Status.sell':8732},
{时间:'21/1/1992','Status.killed':8691},
{时间:'21/1/1992','Status.selled':8620},
{时间:'21/1/1993','Status.hold':8511},
{时间:'21/1/1993','Status.killed':8511},
{时间:'21/1/1994','Status.selled':8498},
];
常量结果=[];
设obj={};
for(设i=0;i
尝试以下操作:

const状态=[
{时间:'21/1/1990','Status.selled':8848},
{时间:'21/1/1990','Status.reserved':8804},
{时间:'21/1/1991','Status.reserved':8756},
{时间:'21/1/1991','Status.sell':8732},
{时间:'21/1/1992','Status.killed':8691},
{时间:'21/1/1992','Status.selled':8620},
{时间:'21/1/1993','Status.hold':8511},
{时间:'21/1/1993','Status.killed':8511},
{时间:'21/1/1994','Status.selled':8498},
];
常量结果=[];
设obj={};
for(设i=0;iconsole.log(result);
use
reduce
function查看这里:use
reduce
function查看这里:您能解释一下为什么我们需要
k.slice(7)
?谢谢!这只是从
'Status.sall'
中获取单词
'killed'
。例如,您可能希望使用拆分的值来获取完整的字符串或嵌套方法…?您能否向我解释为什么我们需要
k.slice(7)
?谢谢!这是为了仅从
'Status.sall'
中获取单词
'killed'
。例如,您可能希望使用拆分的值来获取完整字符串或嵌套方法。。。?