将向量中的元素求和到typescript

将向量中的元素求和到typescript,typescript,ecmascript-6,Typescript,Ecmascript 6,如何求和这些值​​根据名字? 我试过那样做,但我遇到了麻烦。 我希望写下这个名称,而不重复这些值的累积和​​在“dataGrf”中 下面我举了一个小例子来说明我要做的事情 我为我的英语道歉 Ex) data: = [ { 'id': 1, 'value': 10, 'name': 'Mary' }, { 'id': 2, 'value': 5, 'name': 'John' }, { 'id': 3, 'value': 2, 'name': 'Mary' }, { 'id': 4

如何求和这些值​​根据名字? 我试过那样做,但我遇到了麻烦。 我希望写下这个名称,而不重复这些值的累积和​​在“dataGrf”中

下面我举了一个小例子来说明我要做的事情

我为我的英语道歉

Ex) data: = [
  { 'id': 1, 'value': 10, 'name': 'Mary' },
  { 'id': 2, 'value': 5, 'name': 'John' },
  { 'id': 3, 'value': 2, 'name': 'Mary' },
  { 'id': 4, 'value': 3, 'name': 'Lauren' },
  { 'id': 5, 'value': 2, 'name': 'Lauren' },
  { 'id': 6, 'value': 6, 'name': 'Mary' },
];
expected result: 

dataGrf: [
  { 'name': 'Mary', 'valueAcum': 18 },
  { 'name': 'John', 'valueAcum': 5 },
  { 'name': 'Lauren', 'valueAcum': 5 }
]
我的图表模型:

export class ChartModel {
  constructor(
      public name?: string,
      public valueAcum?: number
  ) { }
}
我的职能:

loadData() {
    this.loading = true;
    this.dataChart.emit(null);

    this.dataService.getData(this.year, this.month).
      subscribe((data: dataModel[]) => {

        let dataSort: dataModel[];

        dataSort = data.filter(f => f.value> 0)
        dataSort = dataSort.sort((a, b) => a.value> b.value? -1 : 1)

        this.dataChart.emit(dataSort);

        this.dataGrf = new Array<ChartModel>();

        let valueAcum= dataSort.reduce((sum, record) => {

          let nameArea = data.map(f => f.name);
          nameArea = nameArea.filter(function (item, pos) {
            return nameArea.indexOf(item) == pos;
          });

          if (record.name === nameArea[0]) {
            return sum + record.value;
          }
            return sum;
        }, 0);

        dataSort.forEach(f => {
          this.dataGrf.push(new ChartModel(f.name, valueAcum))
        });

        this.loading = false;
      }
  }
loadData(){
这是。加载=真;
this.dataChart.emit(null);
this.dataService.getData(this.year,this.month)。
订阅((数据:dataModel[])=>{
let dataSort:dataModel[];
dataSort=data.filter(f=>f.value>0)
dataSort=dataSort.sort((a,b)=>a.value>b.value?-1:1)
this.dataChart.emit(dataSort);
this.dataGrf=新数组();
让valueAcum=dataSort.reduce((总和,记录)=>{
让nameArea=data.map(f=>f.name);
nameArea=nameArea.filter(功能(项目、位置){
返回nameArea.indexOf(item)==pos;
});
if(record.name==nameArea[0]){
返回和+记录值;
}
回报金额;
}, 0);
dataSort.forEach(f=>{
this.dataGrf.push(新的图表模型(f.name,valueAcum))
});
这一点:加载=错误;
}
}

您可以通过使用
reduce
功能创建另一个对象来进行数据转换,该对象的键是名称,值是具有name和valueAccum键的对象。然后您可以使用
对象将该对象转换为数组。值

const数据=[
{'id':1,'value':10,'name':'Mary'},
{'id':2,'value':5,'name':'John'},
{'id':3,'value':2,'name':'Mary'},
{'id':4,'value':3,'name':'Lauren'},
{'id':5,'value':2,'name':'Lauren'},
{'id':6,'value':6,'name':'Mary'},
];
const result=Object.values(data.reduce((accum,{name,value})=>{
常量accumValue=accum[name]?accum[name]。valueAccum:0;
accum[name]={name,valueAccum:value+accumValue};
返回累计;
}, {}));
console.log(结果)