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

怎么实现数组内对象code值相同的情况下poll值进行累加

怎么实现数组内对象code值相同的情况下poll值进行累加

胡子哥哥 2019-03-15 14:15:07
var arr = [    {"code": "a", "poll": 7},    {"code": "b", "poll": 2},    {"code": "c", "poll": 18},    {"code": "a", "poll": 5},    {"code": "c", "poll": 12},    {"code": "a", "poll": 1}];var arr2 = [{"code": "a", "poll": 13},{"code": "b", "poll": 2},{"code": "c", "poll": 30}];如何实现arr → 到arr1 的转变,且code值 不仅仅为 a b c 也可能为 adsdsd dsdsd a223 任意值 如何实现 类似转变
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

给你来一个不考虑性能的


var arr = [

  {"code": "a", "poll": 7},

  {"code": "b", "poll": 2},

  {"code": "c", "poll": 18},

  {"code": "a", "poll": 5},

  {"code": "c", "poll": 12},

  {"code": "a", "poll": 1}

];


let arr1 = arr.sort((pre, next) => pre.code > next.code).reduce((pre, v) => {

  let lastIndex = pre.length - 1;

  if (lastIndex >= 0 && pre[lastIndex].code === v.code) {

    pre[lastIndex].poll += v.poll;

  } else {

    pre.push(Object.assign({}, v));

  }

  return pre;

}, []);

console.log(arr1);

再来个一次遍历的,以空间换时间。


function pollAdd(arr) {

  let res = [];

  let tmp = {};


  arr.forEach((v) => {

    if (!tmp.hasOwnProperty(v.code)) {

      tmp[v.code] = res.length;

      return res.push(Object.assign({}, v));

    }

    res[tmp[v.code]].poll += v.poll;

  });


  return res;

}


查看完整回答
反对 回复 2019-04-25
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

你这是js吧


    var arr = [

        {"code": "a", "poll": 7},

        {"code": "b", "poll": 2},

        {"code": "c", "poll": 18},

        {"code": "a", "poll": 5},

        {"code": "c", "poll": 12},

        {"code": "a", "poll": 1}

    ];

    var newArr = [];

    for (i in arr) {

        if(typeof(newArr[arr[i].code]) == 'undefined'){

            newArr[arr[i].code] = 0;

        }

        newArr[arr[i].code] += arr[i].poll;

    }


查看完整回答
反对 回复 2019-04-25
  • 3 回答
  • 0 关注
  • 444 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信