为了账号安全,请及时绑定邮箱和手机立即绑定

Sum javascript object property在对象数组中具有相同对象property

Sum javascript object property在对象数组中具有相同对象property

陪伴而非守候 2019-07-31 10:15:25
Sum javascript object property在对象数组中具有相同对象propertyB的值如何获取javascript对象数组,例如:my 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}]并通过对值进行求和来合并重复键。为了得到这样的东西:my reducedObjArr = [{key:Mon Sep 23 2013 00:00:00 GMT-0400, val:96},{key:Mon Sep 24 2013 00:00:00 GMT-0400, val:78},{key:Mon Sep 25 2013 00:00:00 GMT-0400, val:23}]我已经尝试迭代并添加到一个新数组,但这不起作用:var reducedObjArr = [];var item = null, key = null;for(var i=0; i<objArr.length; i++) {   item=objArr[i];   key = Object.keys(item)[0];   item=item[key];   if(!result[key]){       result[key] = item;   }else{       result[key] += item;}   }a
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以直接使用map减少:而不是使用for循环和推送值。

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 reducelet 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 arraylet reducedObjArr = [...counts].map(([key, value]) => {
  return {key, value}})console.log(reducedObjArr);


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号