[英]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.