JavaScript 实现更多数组的高阶函数
本文最后更新于:2020年12月30日 凌晨
场景
虽说人人平等,但有些人更加平等。
为什么有了 Lodash 这种通用函数工具库,吾辈要写这篇文章呢?吾辈在 SegmentFault 上经常看到关于 JavaScript 数组的相关疑问,甚至于,相同类型的问题,只是数据变化了一些,就直接提出了一个新的问题(实际上,对自身并无帮助)。简单搜索了一下 Array,居然有 2360+ 条的结果,足可见这类问题的频率之高。若是有一篇适合 JavaScript 萌新阅读的自己实现数组更多操作的文章,情况或许会发生一些变化。
下面吾辈便来实现以下几种常见的操作
uniqueBy
: 去重sortBy
: 排序filterItems
: 过滤掉一些元素diffBy
: 差异groupBy
: 分组arrayToMap
: Array 转换为 Map- 递归操作
前言:
你至少需要了解 ES6 的一些特性你才能愉快的阅读
uniqueBy
: 去重
相关问题
1 |
|
使用
1 |
|
sortBy
: 排序
相关问题
1 |
|
使用
1 |
|
filterItems
: 过滤掉一些元素
相关问题
1 |
|
使用
1 |
|
diffBy
: 差异
相关问题
1 |
|
使用
1 |
|
groupBy
: 分组
相关问题
1 |
|
使用
1 |
|
arrayToMap
: 转换为 Map
相关问题
1 |
|
使用
1 |
|
递归
相关问题
以上种种操作皆是对一层数组进行操作,如果我们想对嵌套数组进行操作呢?例如上面这两个问题?其实问题是类似的,只是递归遍历数组而已。
1 |
|
使用
1 |
|
反例
事实上,目前 SegmentFault 上存在着大量低质量且重复的问题及回答,关于这点确实比不上 StackOverflow。下面是两个例子,可以看一下能否发现什么问题
事实上,不管是问题还是答案,都没有突出核心 – Array 映射为 Map/Array 分组,而且这种问题和答案还层出不穷。如果对 Array 的 API 都没有看过一遍就来询问的话,对于帮助者来说却是太失礼了!
总结
JavaScript 对函数式编程支持很好,所以习惯高阶函数于我们而言是一件好事,将问题的本质抽离出来,而不是每次都局限于某个具体的问题上。