前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【30秒一个知识点】Adapter(一)

【30秒一个知识点】Adapter(一)

作者头像
ConardLi
发布2019-05-23 21:49:09
2990
发布2019-05-23 21:49:09
举报
文章被收录于专栏:code秘密花园code秘密花园

本系列翻译自开源项目 30-seconds-of-code 这是一个非常优秀的系列,不是说真的三十秒就能理解,也需要你认真的思考,其中有一些点非常精妙,很值得一读。 本文在我的github同步更新,点击文章末尾阅读全文你可以看到当前翻译的全部系列。 如果您对本期有不同或者更好的见解,请后台留言,喜欢请点个好看,谢谢阅读。

ary

创建一个可以接收n个参数的函数, 忽略其他额外的参数。

调用提供的函数 fn,参数最多为n个, 使用 Array.prototype.slice(0,n) 和展开操作符 ( ...)。

代码语言:javascript
复制
const ary = (fn, n) => (...args) => fn(...args.slice(0, n));

示例

代码语言:javascript
复制
const firstTwoMax = ary(Math.max, 2);
[[2, 6, 'a'], [8, 4, 6], [10]].map(x => firstTwoMax(...x)); // [6, 8, 10]

call

给定一个key和一组参数,给定一个上下文时调用它们。主要用于合并。

使用闭包调用上下文中key对应的值,即带有存储参数的函数。

代码语言:javascript
复制
const call = (key, ...args) => context => context[key](...args);

示例

代码语言:javascript
复制
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

将一个接收数组参数的函数改变为可变参数的函数。

给定一个函数,返回一个闭包,该闭包将所有输入收集到一个数组接受函数中。

代码语言:javascript
复制
const collectInto = fn => (...args) => fn(args);

示例

代码语言:javascript
复制
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); // [1, 2, 3] (after about 2 seconds)

flip

Flip以一个函数作为参数,然后把第一个参数作为最后一个参数。

返回一个可变参数的闭包,在应用其他参数前,先把第一个以外的其他参数作为第一个参数。

代码语言:javascript
复制
const flip = fn => (first, ...rest) => fn(...rest, first);

示例

代码语言:javascript
复制
let a = { name: 'John Smith' };
let b = {};
const mergeFrom = flip(Object.assign);
let mergePerson = mergeFrom.bind(null, a);
mergePerson(b); // == b
b = {};
Object.assign(b, a); // == b

over

创建一个函数,这个函数可以调用每一个被传入的并且才有参数的函数,然后返回结果。

使用 Array.prototype.map()Function.prototype.apply()将每个函数应用给定的参数。

代码语言:javascript
复制
const over = (...fns) => (...args) => fns.map(fn => fn.apply(null, args));

示例

代码语言:javascript
复制
const minMax = over(Math.min, Math.max);
minMax(1, 2, 3, 4, 5); // [1,5]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code秘密花园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ary
  • call
  • collectInto
  • flip
  • over
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档