简体   繁体   中英

Javascript reduce with a nested array

I'm trying to sum a nested array with the reduce method. My dat array looks like this:

var data = [
    [1389740400000, 576],
    [1389741300000, 608],
    [1389742200000, 624],
    [1389743100000, 672],
    [1389744000000, 691]
];

I got this:

// es5
data.reduce(function(prev, next) { return prev + next[1]; })

// es6 syntax
data.reduce((prev, next) => prev + next[1])

However I only do need the second value from each (nested) array. Any hints or tipps for me? I'm trying to sum all values within the array.

// Edit: Thanks for the answers. The problem was, that I missed the initialValue at the end.

// es6 solution
data.reduce((prev, next) => prev + next[1], 0)

Do it as following

var result = data.reduce(function (prev,next) {
    return prev + next[1];
},0);

console.log(result);//prints 3171

Here I am sending 0 as prev initially. So it will go like this

First Time  prev->0 next->[1389740400000, 576]
Second Time prev->576 next->[1389740400000, 608]

Do a console.log(prev,next) to understand much better.

If you'll see in docs you will get it.

A generic approach for all array, even if they are irregular styled.

Use: array.reduce(sum, 0)

 function sum(r, a) { return Array.isArray(a) ? a.reduce(sum, r) : r + a; } console.log([ [1389740400000, 576], [1389741300000, 608], [1389742200000, 624], [1389743100000, 672], [1389744000000, 691] ].reduce(sum, 0)); console.log([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12, [13, 14, 15, 16]] ].reduce(sum, 0));

What you have written would work if data is an array of integers. In your case, data is an array of arrays. Hence the return statement should operate on elements of the array:

return [previousValue[0] + currentValue[0], previousValue[1] + currentValue[1]];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM