首页 > 解决方案 > 如何使用 Array.reduce()?

问题描述

我有如下 JSON 响应:

[
{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "b", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "c", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "d", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "e", "data": [{"value":10,"id":1},{"value":20,"id":2}],
]

如何对每个数据元素中的每个“值”求和(按列)并得到如下结果:

[{"name": "something", "data":[{"value":50,"id":1},{"value":100,"id":2}]

如何为此使用 array.reduce() 或者是否有任何其他方法可以实现上述结果?

标签: javascriptarrays

解决方案


试试下面的逻辑。

var series = [{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}]}, ... , ....]

var resultSeries = series.reduce((acc, cur) => {
    var result = {
        name: ‘Something’,
        data: []
    };
    var dataArray = acc.data.map((el, i) => {
        var curData = cur.data[i] || {};
        var sum = (el.value || 0) + (curData.value || 0);
        return {
            value: sum
        }
    });
    result.data = dataArray ;
    return result;
})

现在resultSeries将举行

[{"name": "something", "data":[{"value":50,"id":1},{"value":100,"id":2}]

推荐阅读