30-seconds-code——adapter
2017-12-29 20:10
288 查看
英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md
使用闭包调用存储的键值与存储的参数
给定一个函数,它返回一个把所有传入的参数转变为数组的闭包函数.
用一个闭包接受可变参数的输入, 在使用出第一个参数外的其余参数前先拼接第一个参数使它成为最后一个参数.
用
返回一个函数,它返回一个调用所有原始函数的
用
在 Node 8+ 中, 你可以用
用闭包和spread (
更多关于30-seconds-code中文翻译
https://github.com/lvzhenbang/article/blob/master/js/30-seconds-code/index.md
Adapter
call
给定一个键值和一组参数,但给定一个上下文时调用它们。使用闭包调用存储的键值与存储的参数
const call = ( key, ...args ) => context => context[ key ]( ...args ); /* Promise.resolve( [ 1, 2, 3 ] ).then( call('map', x => 2 * x ) ).then( console.log ) //[ 2, 4, 6 ] const map = call.bind(null, 'map') Promise.resolve( [ 1, 2, 3 ] ).then( map( x => 2 * x ) ).then( console.log ) //[ 2, 4, 6 ] */
collectInto
改变一个可以接受数组为参数的函数成为可变量函数.给定一个函数,它返回一个把所有传入的参数转变为数组的闭包函数.
const collectInto = fn => ( ...args ) => fn( args ); /* const Pall = collectInto( Promise.all.bind(Promise) ) let p1 = Promise.resolve(1) let p2 = Promise.resolve(2) let p3 = new Promise((resolve) => setTimeout(resolve,2000,3)) Pall(p1, p2, p3).then(console.log) */
flip
Flip利用一个函数作为参数,然后降低一个参数转变为最后一个参数
用一个闭包接受可变参数的输入, 在使用出第一个参数外的其余参数前先拼接第一个参数使它成为最后一个参数.
const flip = fn => (...args) => fn(args.pop(), ...args) /* let a = {name: 'John Smith'} let b = {} const mergeFrom = flip(Object.assign) let mergePerson = mergeFrom.bind(a) mergePerson(b) // == b b = {} Object.assign(b, a) // == b */
pipeFunctions
从左到右的执行函数组合.用
Array.reduce()和 spread (…) 操作符来实现从左向右的执行函数组合. 第一个函数可以接受任意个参数,其余的只能接受一个参数.
const pipeFunctions = (...fns) => fns.reduce((f, g) => (...args) => g(f(...args))); /* const add5 = x => x + 5 const multiply = (x, y) => x * y const multiplyAndAdd5 = pipeFunctions(multiply, add5) multiplyAndAdd5(5, 2) -> 15 */
promisify
转化一个返回 promise 的异步函数.返回一个函数,它返回一个调用所有原始函数的
Promise.
用
...rest去传递输入的参数.
在 Node 8+ 中, 你可以用
util.promisify
const promisify = func => (...args) => new Promise((resolve, reject) => func(...args, (err, result) => err ? reject(err) : resolve(result)) ); // const delay = promisify((d, cb) => setTimeout(cb, d)) // delay(2000).then(() => console.log('Hi!')) -> Promise resolves after 2s
spreadOver
用一个可变参数的函数并返回一个闭包,该闭包可以将输入的数组参数的转变为参数序列.用闭包和spread (
...) 操作符去映射一个函数的参数数组.
const spreadOver = fn => argsArr => fn(...argsArr); /* const arrayMax = spreadOver(Math.max) arrayMax([1,2,3]) // -> 3 arrayMax([1,2,4]) // -> 4 */
更多关于30-seconds-code中文翻译
https://github.com/lvzhenbang/article/blob/master/js/30-seconds-code/index.md
相关文章推荐
- 安装 Fatal error: Maximum execution time of 30 seconds exceeded in …/magento/lib/Varien/Db/Adapter/Pdo/Mysql.php on line 230
- 30-seconds-code——Object
- 30-seconds-code——math
- 30-seconds-code——Function
- 30-seconds-code——browser
- 30-seconds-code——Array
- 30-seconds-code——string
- 30-seconds-code ——utility
- Fatal error: Maximum execution time of 30 seconds exceeded i
- Educational Codeforces Round 30 A. Chore
- Educational Codeforces Round 30 - B. Balanced Substring【思维+map】
- Educational Codeforces Round 30 D.Merge Sort
- Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds
- Educational Codeforces Round 30 837A. Chores
- 云之家API获取数据,Unirest.post 关闭Closing connections idle longer than 30 SECONDS
- Educational Codeforces Round 30 B.Balanced Substring
- Educational Codeforces Round 30 D.Merge Sort
- lintcode--30. 插入区间
- Educational Codeforces Round 30 - B. Balanced Substring
- Educational Codeforces Round 30 D.Merge Sort