Sum javascript object propertyA values with same object propertyB in array of objects

前端 未结 9 2643
醉梦人生
醉梦人生 2020-11-22 04:48

How would one take a javascript array of objects such as:

my objArr = [
{key:Mon Sep 23 2013 00:00:00 GMT-0400, val:42},
{key:Mon Sep 24 2013 00:00:00 GMT-04         


        
9条回答
  •  南方客
    南方客 (楼主)
    2020-11-22 05:37

    Rather than using a for loop and pushing values, you can directly use map and reduce:

    let objArr = [
      {key: 'Mon Sep 23 2013 00:00:00 GMT-0400', val: 42},
      {key: 'Mon Sep 24 2013 00:00:00 GMT-0400', val: 78},
      {key: 'Mon Sep 25 2013 00:00:00 GMT-0400', val: 23},
      {key: 'Mon Sep 23 2013 00:00:00 GMT-0400', val: 54}
    ];
    
    // first, convert data into a Map with reduce
    let counts = objArr.reduce((prev, curr) => {
      let count = prev.get(curr.key) || 0;
      prev.set(curr.key, curr.val + count);
      return prev;
    }, new Map());
    
    // then, map your counts object back to an array
    let reducedObjArr = [...counts].map(([key, value]) => {
      return {key, value}
    })
    
    console.log(reducedObjArr);

提交回复
热议问题