[Javascript] Transduce over any Iteratable Collection
So far we've been transducing by manually calling .reduce()
on arrays, but we want to be able to transduce over other collection types as well.
In this lesson we'll create a transduce
function to support transducing over any data structure that implements the es2015 iterable protocol. We’ll put it to the test by transducing over strings and maps, as well as going from one collection type as input to another as output.
The whole point to make transducer work for all iteratable collection is that, iteratable collction can be Map, TypedArray, Array, Set and String.
Current the implement from last post:
[1, 2, 3, 4].reduce( compose(isNot2Filter, isEvenFilter, doubleMap)(pushReducer), [], ); const transduce = (xf, reducer, seed, collection) => { collection.reduce(xf(reducer), seed) }
This implementaion only works for Array type.
If we want Transducer can be used for all Itertable type, we need to change by using 'reduce' to 'for...of' loop.
const transduce = (xf, reducer, seed, collection) => { const transformedReducer = xf(reducer); let accumulation = seed; for (const value of collection) { accumulation = transformedReducer(accumulation, value); } return accumulation; }
Now that, we can use for any iteratable collection not only Array type:
const toUpper = str => str.toUpperCase(); const isVowel = char => ['a', 'e', 'i', 'o', 'u', 'y'].includes(char.toLowerCase()); transduce( compose(map(toUpper), filter(isVowel)), (str, char) => str + char, '', 'adrian', ); const numMap = new Map(); numMap.set('a', 1); numMap.set('b', 2); numMap.set('c', 3); numMap.set('d', 4); transduce( compose(isNot2Filter, isEvenFilter, doubleMap), pushReducer, [], numMap.values(), );
相关文章
- javascript 基础_JavaScript高级编程
- JavaScript 数组排序函数sort()的使用
- JavaScript学习总结(十七)——Javascript原型链的原理详解编程语言
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- MySQL中的ANY运算符如何使用(mysql中any怎么用)
- MySQL中使用ANY子查询的方法详解(mysql中any子查询)
- MySQL中使用ANY函数取字段最大值(mysql中any取最值)
- 任意MySQL 中 Any 的作用(any 的作用mysql)
- Javascript阻止javascript事件冒泡,获取控件ID值
- Javascript学习笔记1数据类型
- Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
- Javascript异步加载详解(浏览器在javascript的加载方式)
- Javascript图像处理—亮度对比度应用案例
- Javascript算符的优先级介绍
- 浅谈Javascript变量作用域问题
- JavaScript中伪协议javascript:使用探讨