如何解决在ES6迭代器上使用JS数组函数
我非常喜欢JS Array对象函数(例如map()
,filter()
,reduce()
,some()
,every()
等)的简单性和表达性。它们允许创建非常简洁但清晰的代码来操纵数据结构。
我还是EC6迭代器协议的忠实拥护者。它可以通过使用(... of ...) {...}
语句来使代码可读,并且Map
和Set
之类的标准集合也很好地支持了该代码。
但是,从Java的背景开始,我曾经期望集合框架的组合方式保持一致性,而令我感到非常沮丧的是,没有办法使用map()
或filter()
之类的函数一个迭代器。是的,可以使用splice运算符并编写如下代码:[...iterable].filter(...)
,但这不是很好。这样的代码看起来不太清晰,而且,您最终为数组分配了内存。如果您希望滤除大多数值,则这尤其成问题。同样,如果要链接函数,则所有中间结果也将是需要分配内存并将值复制到其中的数组。
我的问题是,是否有一种方法可以用JavaScript(或TypeScript)编写简洁明了的代码,一方面可以使用迭代器/生成器,另一方面可以像上面的数组函数那样使用函数?我对需要使用某些第三方库或编译器的选项持开放态度。我在这里只关心编写尽可能清晰的代码。
编辑:需要明确的是,我不是在寻找一种方法来将过滤器和映射逻辑延迟应用到特定的集合/可迭代对象上。这只是一个例子。我正在寻找一种在可迭代对象上使用类似于数组的函数编写可读而高效的代码的方法。虽然可能会在代码中嘲笑Iterator原型,但不可避免地会引入一些错误,而我宁愿使用一个在它后面有很多眼睛的好处的库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。