You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
不像一些高级别的语言例如 TypeScript 或 Flow,JS 无法提供 function 的类型信息,这使得柯里化相当困难。 当我们拿到一个柯里化的函数,很难知道有多少参数已经被提供和下次我们需要提供那些参数。使用箭头函数我们可以明确定义柯里化函数,使它们易于被其他程序员理解。
functionadd(a,b){returna+b;}varcurriedAdd=_.curry(add);varadd2=curriedAdd(2);add2(1);// 3// becomesconstadd=a=>b=>a+b;constadd2=add(2);// 与上面比很明显 a 是 2add2(1);//与上面比很明显 b 是 1// 3
使用箭头函数定义的柯里化函数特别适合调试。
varlodashAdd=_.curry(function(a,b){returna+b;});varadd3=lodashAdd(3);console.log(add3.length)// 0console.log(add3);//function wrapper() {// var length = arguments.length,// args = Array(length),// index = length;//// while (index--) {// args[index] = arguments[index];// }…// becomesconstes6Add=a=>b=>a+b;constadd3=es6Add(3);console.log(add3.length);// 1console.log(add3);// function b => a + b
Lodash 提供一些函数帮助我们写出链式语句。在多数情况中,原生的集合方法返回一个可以直接被链式操作的数组实例,但是在一些情况中,方法改变了集合,链式操作就不太可能了。(but in some cases where the method mutates the collection, this isn’t possible. 这句不好翻译,求帮助?)
Lodash 是目前最被依赖的 npm 包,但是如果你正在使用 ES6,实际上可以不需要它。围绕许多流行的使用场景,我们打算考虑使用可以帮助节约成本的原生集合方法与箭头函数以及其它新的 ES6 特性。
1. Map, Filter, Reduce
这些集合方法处理数据转换非常容易并且普遍都支持, 我们可以使用箭头函数配合它们,写出简洁的代码去代替 Lodash 提供的实现。
不应该只有这些,如果使用 ES6 polyfill,我们也可以使用 find, some, every 和 reduceRight。
2. Head & Tail
解构语法 (Destructuring syntax) 允许我们可以在不使用 utility 函数取得一个列表的 head 和 tail。
也可以使用相似的方式获取 initial 的元素和 last 元素。
如果你因为 reverse 方法改变数据结构而烦恼,可以在调用 reverse 之前使用展开操作克隆数组。
3. Rest & Spread
rest 和 spread 方法允许我们定义和调用接收可变参数的函数。ES6 为这些操作引入 dedicated syntaxes。
4. Curry
不像一些高级别的语言例如 TypeScript 或 Flow,JS 无法提供 function 的类型信息,这使得柯里化相当困难。 当我们拿到一个柯里化的函数,很难知道有多少参数已经被提供和下次我们需要提供那些参数。使用箭头函数我们可以明确定义柯里化函数,使它们易于被其他程序员理解。
使用箭头函数定义的柯里化函数特别适合调试。
如果我们正在使用函数式编程库,像 lodash/fp 或 ramda,我们也可以使用箭头函数去除必要的自动柯里化风格。
5. Partial
和柯里化一样,我们可以使用箭头函数使偏函数应用 (partial application) 变得容易和明确。
它也可能通过展开操作将剩余参数用于可变参数函数。
6. Operators
Lodash 配备了大量被重新实现的语法操作的函数,因此它们可以被传入到集合方法中。
在大部分情况下,箭头函数使它们精简到我们可以将它们定义成单行。
7. Paths
许多 lodash 的方法,将 path 看做字符串或者数组。我们可以使用箭头函数创建更可复用 path。
由于这些 path “恰恰类似” 函数,我们也可以把它们组装成如下形式:
甚至可以做出高优先级且带参数的 path。
8. Pick
pick 允许我们从一个目标对象中选择我们想要的属性。我们可以使用解构(destructuring)和简写对象字面量(shorthand object literals)达到相同的结果。
9. Constant, Identity, Noop
Lodash 提供一些用于创建特殊行为的简单函数的工具。
10. Chaining & Flow
Lodash 提供一些函数帮助我们写出链式语句。在多数情况中,原生的集合方法返回一个可以直接被链式操作的数组实例,但是在一些情况中,方法改变了集合,链式操作就不太可能了。(but in some cases where the method mutates the collection, this isn’t possible. 这句不好翻译,求帮助?)
然而,我们可以用箭头函数数组定义相同的变换。
使用这种方式,我们甚至都不需要考虑 tap 和 thru 的不同。在函数中封装 reduce 操作会是一个很棒的通用工具。
结论
Lodash 仍然是一个伟大的库,本文只是提供一个全新视角,新版本的 JavaScript 如何让我们解决一些在之前依赖 utility 模块解决的问题。
原文地址:
https://www.sitepoint.com/lodash-features-replace-es6/?utm_source=javascriptweekly&utm_medium=email
The text was updated successfully, but these errors were encountered: