Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript/TypeScript计算总行数_Javascript_Arrays_Typescript - Fatal编程技术网

使用Javascript/TypeScript计算总行数

使用Javascript/TypeScript计算总行数,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有以下数组: [ {category: 'Category 1', data: [ {date: '01/04/2021', value: 10}, {date: '01/03/2021', value: 20}, {date: '01/02/2021', value: 5}] }, {category: 'Category 2', data: [ {date: '01/04/2021', value: 8}, {date: '01/03/2021', value: 2}

我有以下数组:

[ 
     {category: 'Category 1', data: [ {date: '01/04/2021', value: 10}, {date: '01/03/2021', value: 20}, {date: '01/02/2021', value: 5}] },
     {category: 'Category 2', data: [ {date: '01/04/2021', value: 8}, {date: '01/03/2021', value: 2}, {date: '01/02/2021', value: 15}] },
     {category: 'Category 3', data: [ {date: '01/04/2021', value: 7}, {date: '01/03/2021', value: 1}, {date: '01/02/2021', value: 5}] }
]
我想添加一个总计行,其中包含类别的每个日期的值之和

例如:

[ 
     {category: 'Category 1', data: [ {date: '01/04/2021', value: 10}, {date: '01/03/2021', value: 20}, {date: '01/02/2021', value: 5}] },
     {category: 'Category 2', data: [ {date: '01/04/2021', value: 8}, {date: '01/03/2021', value: 2}, {date: '01/02/2021', value: 15}] },
     {category: 'Category 3', data: [ {date: '01/04/2021', value: 7}, {date: '01/03/2021', value: 1}, {date: '01/02/2021', value: 5}] },
     {category: 'Total', data: [ {date: '01/04/2021', value: 25}, {date: '01/03/2021', value: 23}, {date: '01/02/2021', value: 30}] }
]
我使用以下代码计算总数:

const totalRow = categories.reduce((acc, curr) => {
  if(!acc['data']) {
    acc['data'] = [];
  }
  curr.data.forEach(d => {

      if(!acc['data'].find(a => a.date == d.date)) {
        acc['data'].push(d);
      } else {
        let monthData = acc['data'].find(a => a.date == d.date);
        monthData.value +=  d.value;
      }
  });
  return acc;
}, {});

categories.push({category: 'Total', ...totalRow});
但是,总计行仅包含类别1值


我怎样才能解决这个问题?还有,有没有更好的方法来计算总行数?

这就是我如何获得所需结果的方法:

const数据=[
{
类别:“类别1”,
数据:[
{日期:'01/04/2021',值:10},
{日期:'01/03/2021',值:20},
{日期:'01/02/2021',值:5},
],
},
{
类别:"类别2",,
数据:[
{日期:'01/04/2021',值:8},
{日期:'01/03/2021',值:2},
{日期:'01/02/2021',值:15},
],
},
{
类别:"类别3",,
数据:[
{日期:'01/04/2021',值:7},
{日期:'01/03/2021',值:1},
{日期:'01/02/2021',值:5},
],
},
];
数据推送(
数据还原(
(res,{data})=>(
data.forEach((d)=>{
res.data.find((r)=>r.date==d.date)
?(res.data.find((r)=>r.date==d.date).value+=d.value)
:res.data.push({…d});
}),
物件
),
{类别:'总计',数据:[]}
)
);

控制台日志(数据)这是我如何获得预期结果的:

const数据=[
{
类别:“类别1”,
数据:[
{日期:'01/04/2021',值:10},
{日期:'01/03/2021',值:20},
{日期:'01/02/2021',值:5},
],
},
{
类别:"类别2",,
数据:[
{日期:'01/04/2021',值:8},
{日期:'01/03/2021',值:2},
{日期:'01/02/2021',值:15},
],
},
{
类别:"类别3",,
数据:[
{日期:'01/04/2021',值:7},
{日期:'01/03/2021',值:1},
{日期:'01/02/2021',值:5},
],
},
];
数据推送(
数据还原(
(res,{data})=>(
data.forEach((d)=>{
res.data.find((r)=>r.date==d.date)
?(res.data.find((r)=>r.date==d.date).value+=d.value)
:res.data.push({…d});
}),
物件
),
{类别:'总计',数据:[]}
)
);
控制台日志(数据)
常量类别=[{
类别:“类别1”,
数据:[{
日期:“2021年4月1日”,
数值:10
}, {
日期:2021年3月1日,
价值:20
}, {
日期:“2021年2月1日”,
价值:5
}]
},
{
类别:"类别2",,
数据:[{
日期:“2021年4月1日”,
数值:8
}, {
日期:2021年3月1日,
价值:2
}, {
日期:“2021年2月1日”,
价值:15
}]
},
{
类别:"类别3",,
数据:[{
日期:“2021年4月1日”,
价值:7
}, {
日期:2021年3月1日,
价值:1
}, {
日期:“2021年2月1日”,
价值:5
}]
}
]
const TOTALLOW=类别。减少((acc,curr)=>{
返回curr.data.map(x=>{
const y=acc.find(i=>i.date==x.date);
返回y{
…x,
值:x.value+y.value
}:x
});
}, []);
类别.推送({
类别:“总计”,
数据:totalRow
});
控制台日志(类别)
常量类别=[{
类别:“类别1”,
数据:[{
日期:“2021年4月1日”,
数值:10
}, {
日期:2021年3月1日,
价值:20
}, {
日期:“2021年2月1日”,
价值:5
}]
},
{
类别:"类别2",,
数据:[{
日期:“2021年4月1日”,
数值:8
}, {
日期:2021年3月1日,
价值:2
}, {
日期:“2021年2月1日”,
价值:15
}]
},
{
类别:"类别3",,
数据:[{
日期:“2021年4月1日”,
价值:7
}, {
日期:2021年3月1日,
价值:1
}, {
日期:“2021年2月1日”,
价值:5
}]
}
]
const TOTALLOW=类别。减少((acc,curr)=>{
返回curr.data.map(x=>{
const y=acc.find(i=>i.date==x.date);
返回y{
…x,
值:x.value+y.value
}:x
});
}, []);
类别.推送({
类别:“总计”,
数据:totalRow
});

控制台日志(类别)这可以通过以下方式完成:

const categories=[
{category:'category 1',数据:[{date:'01/04/2021',value:10},{date:'01/03/2021',value:20},{date:'01/02/2021',value:5}]},
{category:'category 2',数据:[{date:'01/04/2021',value:8},{date:'01/03/2021',value:2},{date:'01/02/2021',value:15}]},
{category:'category 3',数据:[{date:'01/04/2021',value:7},{date:'01/03/2021',value:1},{date:'01/02/2021',value:5}]
];
const totalData=categories.map(o=>o.data)
.flat()
.减少((acc,v)=>{
const existing=acc.find(e=>e.date==v.date);
如果(现有){
现有价值+=v价值;
}否则{
acc.push(JSON.parse(JSON.stringify(v));
}
返回acc;
}, []);
categories.push({category:'Total',data:totalData});

console.log(类别)
这可以按如下方式完成:

const categories=[
{category:'category 1',数据:[{date:'01/04/2021',value:10},{date:'01/03/2021',value:20},{date:'01/02/2021',value:5}]},
{category:'category 2',数据:[{date:'01/04/2021',value:8},{date:'01/03/2021',value:2},{date:'01/02/2021',value:15}]},
{category:'category 3',数据:[{date:'01/04/2021',value:7},{date:'01/03/2021',value:1},{date:'01/02/2021',value:5}]
];
const totalData=categories.map(o=>o.data)
.flat()
.减少((acc,v)=>{
const existing=acc.find(e=>e.date==v.date);
如果(现有){
现有价值+=v价值;
}否则{
acc.push(JSON.parse(JSON.stringify(v));
}
返回acc;
}, []);
categories.push({category:'Total',data:totalData});
console.log(categories)
您可以这样尝试

const data=[{category:'category 1',data:[{date:'01/04/2021',value:10},{date:'01/03/2021',value:20},{date:'01