javascript 将对象数组的数组求和在一起

标签 javascript

我有一个具有以下格式的数组

[
[{year:2015, value:23000, value1:1000},{year:2016,value:1000, value1:2000},{year:2017,value:400, value1:3000}],
[{year:2015, value:10000, value1:1000},{year:2016,value:2000, value1:3000},{year:2017,value:500, value1:2000}],
]

我想将它们加在一起,在这个例子中,我想要

[{year:2015,value:33000, value1:2000},{year:2016,value:3000, value1:5000},{year:2017,value:900, value1:5000}]

如果数组中只有两个数组,但较大的数组中可能有更多数组。我怎样才能做到这一点?目前,我无法找出一个好的方法。谢谢

最佳答案

Ecmascript5解决方案:

var arr = [
        [{year:2015, value:23000, value1:1000},{year:2016,value:1000, value1:2000},{year:2017,value:400, value1:3000}],
        [{year:2015, value:10000, value1:1000},{year:2016,value:2000, value1:3000},{year:2017,value:500, value1:2000}]
    ],
    
    // summing up values for each `year`
    years = arr.reduce(function (r, a) {
        a.forEach(function (o) {
            y = o.year;
            if (Array.isArray(r[y])) {
                r[y][0] += o.value;
                r[y][1] += o.value1;
            } else {
                r[y] = [o.value, o.value1];
            }
        });
        return r;
    }, {}),

    // constructing the resulting array containing objects with `year` totals
    result = Object.keys(years).map(function (y) {
        return {year: y, value: years[y][0], value1: years[y][1]};
    });

console.log(result);

关于javascript 将对象数组的数组求和在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696393/

相关文章:

java - 类似于 HTML5 的 canvas.putImageData(arrayOfPixels, 0,0) 的 Swing 方法

javascript - 如何对使用数据列表的文本输入的 keyup 和项目选择执行操作?

JavaScript : how to link categories to date in highcharts

javascript - 在 Firefox 和 Safari 的异步函数中使用 window.open

javascript - 提交按钮 onClick 在表单加载时触发

javascript - Canvas 像素错误

javascript - 如何在 Nuxt 中为多个环境创建构建?

javascript - 如何在 html5 Canvas 上绘制移动的重复图案

javascript - 尝试在 angular2 中使用 stomp.js

javascript - Fabric js如何防止对象缩放到 Canvas 边界之外?