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