资讯专栏INFORMATION COLUMN

30-seconds-code——adapter

dcr309duan / 3065人阅读

摘要:英文文章来源于给定一个键值和一组参数,但给定一个上下文时调用它们。

英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90529.html

相关文章

  • 30-seconds-code——Object

    摘要:英文文章来源于删除对象中除指定键值的属性用递归的方法用方法遍历对象然后删除不是在给定数组中的属性如果你传入,它将对该键所对应的对象进行深度遍历的变形非原著作对所有的键对应的对象进行深度遍历用方法遍历对象然后删除不是在给定数组中的属性如 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/READM...

    lbool 评论0 收藏0
  • 30-seconds-code——string

    摘要:英文文章来源于计算一个字符串中字符的所有排序情况使用递归遍历字符串中的每个字符计算剩余字符串的所有顺序用区合并该字符和剩余字符串的每种顺序然后用将该字符串的所有顺序合并到一个数组中当字符串的等于或者时,是两个基例字符串的首字母大写用 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README...

    tinysun1234 评论0 收藏0
  • 30-seconds-code ——utility集合

    摘要:英文文章来源于返回参数列表中第一个非和的参数用实现返回第一个非参数返回一个用自定义函数中的函数是否返回来对中传入的参数列表尽心过滤用去遍历参数列表,用给定的函数的返回值来过滤参数列表返回给定值的基本类型返回给定值的构造函数名字的小 Utility 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master...

    Jochen 评论0 收藏0
  • 30-seconds-code——browser

    摘要:显示所有指定的元素用操作符和清除所有指定元素的属性。使用了两个事件监听器。将指定的数组元素转换成元素标签,然后将它们插入指定的选择器元素内用和去生成一个元素标签列表复制一个字符串到剪切板。用去执行复制到剪切板。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Browser...

    izhuhaodev 评论0 收藏0
  • 30-seconds-code——array

    摘要:英文文章来源于数组最大公约数计算数字数组最大公约数用和运算式使用递归计算一个数字数组的最大公约数数组最小公倍数求数字数组的最小公倍数用和运算式使用递归计算一个数字数组的最小公倍数返回一个数组中的最大值。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Array 数组最大公...

    adie 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<