相关文章推荐
严肃的橡皮擦  ·  Spring ...·  2 月前    · 
想出国的皮蛋  ·  10. Promise方法 & ...·  1 年前    · 
玩手机的硬盘  ·  SQL Server 2016 ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Is there a better way instead of adding values of arrays up using a generator function as 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}

This doesn't seem to be a problem generators are supposed to solve, so I would not use a generator here.

Directly using reduce (ES5) seems to be 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 multiple arrays across multiple function calls, then return a 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.

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.