如何使用不带for循环的迭代器求和数组值

时间:2018-07-30 18:05:13

标签: javascript for-loop iterator

我只想使用迭代器函数来获取数组值的总和。下面,我使用迭代器获取了各个值,但我使用了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

4 个答案:

答案 0 :(得分:1)

如果您的目的是采用一个迭代器并对所有产生的值求和,则可以通过一个简单的循环轻松完成:

 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

答案 1 :(得分:0)

是的,这是用于reduce 示例。

[1, 2, 3, 4].reduce((sum, number) => sum + number)

  

reduce()方法对一个累加器和数组中的每个元素(从左到右)应用一个函数,以将其减小为单个值。


编辑: :如果您希望一个空数组的值为0(而不是错误),请传递一个初始值:

[1, 2, 3, 4].reduce((sum, number) => sum + number, 0)

答案 2 :(得分:0)

怎么样:

function sumArray(arr) {
    let sum = 0;
    arr.forEach( i => {sum+=i} );
    return sum;
}

答案 3 :(得分:-1)

您可以使用Array的reduce函数来实现此目的。

var a = [1, 2, 3, 4];
var sum = a.reduce( (a,b) => a + b);//sum will be 10