What is the best way to sum arrays using ECMASCRIPT 6 Generator / Functions

Is there a better way instead of adding array values ​​using a generator function as a closure?

var sumArrays = function(){ var sum = 0; return function*(){ while(true){ var array = yield sum; if(array.__proto__.constructor === Array){ sum += array.reduce(function(val,val2){ return val+val2; }); } else sum=0; } }; }; var gen = sumArrays(); // is this step required to make a generator or could it be done at least differently to spare yourself from doing this step? gen = gen(); // sum some values of arrays up console.log('sum: ',gen.next()); // Object { value=0, done=false} console.log('sum: ',gen.next([1,2,3,4])); // Object { value=10, done=false} console.log('sum: ',gen.next([6,7])); // Object { value=23, done=false} // reset values console.log('sum: ',gen.next(false)); // Object { value=0, done=false} console.log('sum: ',gen.next([5])); // Object { value=5, done=false} 
+8
javascript generator
source share
1 answer

This is not a problem that generators should solve, so I would not use a generator here.

Directly using reduce (ES5) seems more appropriate:

 let sum = [1,2,3,4].reduce((sum, x) => sum + x); 

As a function:

 function sum(arr) { return arr.reduce((sum, x) => sum + x); } 

If you really want to sum several arrays over several function calls, return the normal function:

 function getArraySummation() { let total = 0; let reducer = (sum, x) => sum + x; return arr => total + arr.reduce(reducer); } let sum = getArraySummation(); console.log('sum:', sum([1,2,3])); // sum: 6 console.log('sum:', sum([4,5,6])); // sum: 15 

Keep it simple.

+16
source share

All Articles