繁体   English   中英

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

[英]How to sum array values with an iterator without a for loop

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

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

 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

,这是用于reduce 示例。

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

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


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

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

怎么样:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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