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

如何对第一个值(字符串)进行分组并添加相同日期的值?

如何对第一个值(字符串)进行分组并添加相同日期的值?

largeQ 2021-12-23 10:27:03
JAVASCRIPT - JQUERY 对值求和 如何对第一个值(日期)进行分组并添加相同日期的值?大批 :0: (5) ["11-2019", 0, 20, 0, 0]1: (5) ["11-2019", 41, 0, 0, 0]2: (5) ["11-2019", 0, 0, 29, 0]3: (5) ["11-2019", 0, 0, 0, 60]4: (5) ["09-2019", 0, 1, 0, 0]5: (5) ["09-2019", 0, 0, 1, 0]6: (5) ["09-2019", 0, 0, 0, 1]7: (5) ["05-2019", 2, 0, 0, 0]出去 :0: (5) ["11-2019", 41, 20, 29, 60]1: (5) ["09-2019", 0, 1, 1, 1]2: (5) ["05-2019", 2, 0, 0, 0]result = DataAll.reduce(function(r, a) {     a.forEach(function(b, i) {         r[i] = (r[i] || 0) + b;         console.log(r[i]);     });     return r; }, []);
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我会在结果集中找到数组并更新所有值。


var data = [["11-2019", 0, 20, 0, 0], ["11-2019", 41, 0, 0, 0], ["11-2019", 0, 0, 29, 0], ["11-2019", 0, 0, 0, 60], ["09-2019", 0, 1, 0, 0], ["09-2019", 0, 0, 1, 0], ["09-2019", 0, 0, 0, 1], ["05-2019", 2, 0, 0, 0]],

    result = data.reduce((r, a) => {

        var temp = r.find(([date]) => date === a[0])

        if (temp) {

            for (var i = 1; i < a.length; i++) temp[i] += a[i];

        } else {

            r.push([...a]);

        }

        return r;

    }, []);


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2021-12-23
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我filter在您的脚本中添加了 a以从结果中删除 0 值。如果你真的想要 0 值使用


acc[curr[0]]=(acc[curr[0]]||[]).concat(curr.slice(1));

反而。


var inp=[["11-2019", 0, 20, 0, 0],

 ["11-2019", 41, 0, 0, 0],

 ["11-2019", 0, 0, 29, 0],

 ["11-2019", 0, 0, 0, 60],

 ["09-2019", 0, 1, 0, 0],

 ["09-2019", 0, 0, 1, 0],

 ["09-2019", 0, 0, 0, 1],

 ["05-2019", 2, 0, 0, 0]];

 var out=inp.reduce((acc,curr)=>{

   acc[curr[0]]=(acc[curr[0]]||[]).concat(curr.slice(1).filter(v=>v>0));

   return acc

 }, {});

  console.log(out);

  

  // and to get it into your format:

  var outarr=Object.keys(out).map(k=>[k].concat(out[k]))

  console.log(outarr)


是的,如果你想要总和,那么我的版本如下。感谢 Nina 首先提供正确答案。;-)


var inp=[["11-2019", 0, 20, 0, 0],

 ["11-2019", 41, 0, 0, 0],

 ["11-2019", 0, 0, 29, 0],

 ["11-2019", 0, 0, 0, 60],

 ["09-2019", 0, 1, 0, 0],

 ["09-2019", 0, 0, 1, 0],

 ["09-2019", 0, 0, 0, 1],

 ["05-2019", 2, 0, 0, 0]];

 

 let out=inp.reduce((acc,cur)=>{

   if(acc[cur[0]]) acc[cur[0]].forEach((v,i,a)=>a[i]+=cur[i+1]);

   else acc[cur[0]]=cur.slice(1)

   return acc

 }, {} );

 outarr=Object.keys(out).map(k=>[k].concat(out[k]))

 

 console.log(outarr)


查看完整回答
反对 回复 2021-12-23
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

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