首页 > 解决方案 > 如何在没有 for 循环的情况下使用迭代器对数组值求和

问题描述

我想仅使用迭代器函数获取数组值的总和。下面,我使用迭代器获取各个值,但我使用 for 循环最终将它们的值相加。

有没有更优雅的方法来仅使用迭代器函数来完成相同的结果?

function sumArray(arr) {
    function nextIterator() {
        let i = 0;
        var iteratorWithNext = {        
            next: function nextElement() {
                var element = arr[i];
                i++
                return element;
            }
        }
        return iteratorWithNext;
    }
    var iteratorWithNext = nextIterator();

    let sum = 0;
    for (item of arr) {
        sum = sum + iteratorWithNext.next();
    }
    return sum;
}

const array4 = [1, 2, 3, 4];
console.log(sumArray(array4)); // -> 10

标签: javascriptfor-loopiterator

解决方案


如果您的目标是获取一个迭代器并总结其所有产生的值,则可以通过一个简单的循环轻松完成:

 function sum(iterator) {
   let value, done, sum = 0;
   do {
    ({value, done} = iterator.next());
    sum += value || 0;
   } while(!done)
   return sum;
}

function* iter() { yield 1; yield 2; yield 3; }
sum(iter()) // 6

推荐阅读