繁体   English   中英

How to add values from multiple JSON object and store the value in another JSON object in Angular 6

[英]How to add values from multiple JSON object and store the value in another JSON object in Angular 6

我有两个不同的 JSON object。 一个 object 是 empList,另一个是 holidayList。 I want to add hours from each JSON object.Andthe sum of hours should be pushed to sumHoursList JSON object.I am doing this using Angular6. 我不知道如何迭代它以获得所需的结果。 基本上我想从empList的数据列表中添加小时数,想要从假期列表中添加小时数,并且总和值应该是sumhourlist中的append

下面是我的代码。

this.empList = [
      {
      'id': 1,
      'name': 'Name1',
      datalist: [
        {
          "date": 1,
          "hours": 6
        },
        {
          "date": 2,
          "hours": 0
        },
        {
          "date": 3,
          "hours": 12
        }
      ]
      },
      {
        'id': 2,
        'name': 'Name2',
        datalist:[
          {
            "date": 1,
            "hours": 0
          },
          {
            "date": 2,
            "hours": 8
          },
          {
            "date": 3,
            "hours": 0
          }
        ]
      },
    ];

    this.holidayList=[
          {
            "date": 1,
            "hours": 0
          },
          {
            "date": 2,
            "hours": 8
          },
          {
            "date": 3,
            "hours": 12
          }
        ]

   sumHoursList = [
     {
            "date": 1,
            "hours": 6
          },
          {
            "date": 2,
            "hours": 16
          },
          {
            "date": 3,
            "hours": 24
          }
   ]

谁能帮助我如何做到这一点。

这就是我理解这个问题的方式。 您希望将每个日期的小时数加在一起。 使用此循环,您的 emp 数组可以包含动态数量的数据列表。

let sum = holidayList
empList.forEach((emp) => emp.datalist.forEach((obj, i) => sum[i].hours += obj.hours))
console.log(sum)
// output: [{ date: 1, hours: 6 }, { date: 2, hours: 16 }, { date: 3, hours: 24 }]

另请注意,这些不是 JSON 对象。 它们是 JavaScript 对象。

如果我理解正确,您需要对具有相同日期的所有条目的小时值求和,这与它们所在的来源无关。

基本上你可以这样做(不是最有效的方法,但给你一个想法):

// map sources into a unified data structure
const extractedArraysFromEmpList = emplist.map((entry)=>entry.datalist)
const sources:Array<Array<{
  date:number,
  hours:number
}>> = [...extractedArraysFromEmpList,holidaylist];

// now reduce the various sources into one summed array
const result = sources.reduce((reducer:Array<{date:number,hours:number}>, singleSourceArray)=>{
  singleSourceArray.forEach((item:{date:number,hours:number}) => {
    const existingEntry = result.find((summedItem)=>summedItem.date===item.date);
    // if a entry with matching date already exists, sum hours
    if(existingEntry) existingEntry.hours += item.hours;
    // if no entry exists, add it.
    else result.push({date:item.date,hours:item.hours})
  }
}, [])

// result is sumHoursList

请注意,代码未经测试。 但它应该让您了解如何解决这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM