javascript - 如何在没有 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
解决方案
如果您的目标是获取一个迭代器并总结其所有产生的值,则可以通过一个简单的循环轻松完成:
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
推荐阅读
- javascript - 未捕获的 SyntaxError:输入 tinymce.min.js 的意外结束
- c# - 简化 HTMLAgilitypack 文档中的 Linq 搜索
- node.js - 如何修复 NodeJS 中的“无法读取未定义的属性“发出”错误
- javascript - 使用 JavaScript 拆分逗号分隔的字符串但忽略分号之间的逗号
- javascript - 从正则表达式中删除子正则表达式查询
- java - Windows 是否有唯一的密钥/指纹,重新安装后不会消失?
- visual-studio-extensions - 扩展 Visual Studio 以环绕外部提供程序
- python - Python中只需要显示一个itertools计算列表的当前元素
- reactjs - 如何修复在 Select 中不显示任何值的错误,我可以单击它并获取最后一个对象
- javascript - 在 AFrame 中创建沉淀