JavaScript 代码片段

转载 2018年01月05日 00:00:00

近期在GitHub上看到一位叫Chalarangelo的用户写了一篇30 秒就能理解的 JavaScript 代码片段,很多人都在看,下面分享一些他的JS用法。


给定一个 key 和一个 set 作为参数,给定上下文时调用它们。主要用于函数组合。使用闭包以存储的参数调用存储的 key 。


const call = (key, ...args) => context => context[key](...args);


将接受数组的函数改变为可变参数函数。给定一个函数,返回一个闭包,将所有输入收集到一个接受函数的数组中。


const collectInto = fn => (...args) => fn(args);


flip 接受一个函数参数,然后将该函数第一个参数作为最后一个参数。返回一个接受可变参数输入的闭包,并且在应用其余参数之前将最后一个参数作为第一个参数。


const flip = fn => (...args) => fn(args.pop(), ...args);


执行从左到右的函数组合。使用Array.reduce()与展开操作符(...)来执行从左到右的函数组合。第一个(最左边的)函数可以接受一个或多个参数;其余的函数必须是一元函数。


const pipeFunctions = (...fns) => fns.reduce((f, g) => (...args) => g(f(...args)));


转换一个异步函数,以返回一个 promise 。使用柯里化返回一个函数,这个函数返回一个调用原始函数的 Promise 。 使用 ...rest 运算符传入所有参数。


const promisify = func => (...args) =>
 new Promise((resolve, reject) =>
   func(...args, (err, result) => (err ? reject(err) : resolve(result)))
 );


接受一个可变参数函数并返回一个闭包,该闭包接受一个参数数组映射到该函数的输入。使用闭包和展开运算符 (...) 将参数数组映射到函数的输入。


const spreadOver = fn => argsArr => fn(...argsArr);


把一个数组分块成指定大小的小数组。使用 

Array.from() 创建一个新的数组,它的长度就是生成 chunk(块) 的数量。 使用 Array.slice() 将新数组的每个元素映射到长度为 size 的 chunk 中。 如果原始数组不能均匀分割,最后的 chunk 将包含剩余的元素。


const chunk = (arr, size) =>
 Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
   arr.slice(i * size, i * size + size)
 );


从数组中移除 falsey 值元素。使用 Array.filter() 过滤掉数组中所有 假值元素(false, null, 0, "", undefined, 和 NaN)。


const compact = arr => arr.filter(Boolean);


计算数组中值的出现次数。每次遇到数组中的某个特定值时,使用 Array.reduce() 来递增计数器。


const countOccurrences = (arr, value) => arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);


深度平铺一个数组。使用递归。 通过空数组([]) 使用 Array.concat() ,结合 展开运算符( ... ) 来平铺数组。 递归平铺每个数组元素。


const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));



原文地址:https://github.com/Chalarangelo/30-seconds-of-code

译文地址:http://www.css88.com/30-seconds-of-code/

Context3D类的dispose方法

释放所有资源以及与此 Context3D 关联的内部存储。 所有通过此 Context3D 创建的索引缓冲区、顶点缓冲区、纹理和程序均被处置,如同对其每一个单独调用 dispose() 一样。此外,...
  • wkyb608
  • wkyb608
  • 2011年11月17日 14:26
  • 1025

Unity3D-5.0+的标准资源包下载

最近有很多小伙伴说找不到Unity5的标准资源包,细心的同学会发现Unity5的安装包比Unity4.x的安装包小了很多,其实是Unity5的安装包里并不自带标准资源包的原因。 Unity5的标准资...
  • qq_35936174
  • qq_35936174
  • 2017年06月29日 15:11
  • 2752

前端开发中最常用的JS代码片段

前端开发中最常用的JS代码片段
  • wangji5850
  • wangji5850
  • 2016年05月11日 16:38
  • 1444

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

原文:Chalarangelo  译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-wit...
  • arsaycode
  • arsaycode
  • 2017年12月18日 15:37
  • 178

[Unity 3D] Unity 3D 性能优化 (一)

听到过很多用Unity 3D开发游戏的程序员抱怨引擎效率太低,资源占用太高,包括我自己在以往项目的开发中也头疼过。最近终于有了空闲,可以仔细的研究一下该如何优化Unity 3D下的游戏性能。 模型贴图...
  • lijing_hi
  • lijing_hi
  • 2013年09月14日 17:47
  • 5879

Cocos2d-x 3.3 的3D开发功能介绍

主要有以下功能: 1. 基本的Sprite3D使用,加载静态模型和动态模型,看 Sprite3DBasicTest 2.Sprite3D对象的旋转,缩放等Action操作 3.Sprite3D中使用S...
  • sdhjob
  • sdhjob
  • 2014年09月26日 12:12
  • 13341

48个javascript代码片段

javascript,递归,array方法
  • WYX15011474269
  • WYX15011474269
  • 2017年12月18日 10:24
  • 95

JavaScript 代码片段

以YYYY-MM-DD的格式输出今天的日期 function Today () { var d = new Date(); var year = d.getFullYear(); /...
  • cxl444905143
  • cxl444905143
  • 2015年07月13日 11:06
  • 347

Unity3d + UGUI 的多分辨率适配

1、Canvas的属性配置
  • dingkun520wy
  • dingkun520wy
  • 2015年10月28日 17:12
  • 17220

Unity3d 载入 C++/CLI (托管模式c++) 的动态库(DLL)

由于最近开发游戏寻路A*使用非常频繁.所以是逻辑上的瓶颈. c#又比c++慢一倍.所以决定上c++.这样算一种优化吧.哈哈. 关于vs上的vc++.分托管和非托管模式.  托管模式就是 C++/CLI...
  • spiritring
  • spiritring
  • 2014年04月04日 16:30
  • 12487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript 代码片段
举报原因:
原因补充:

(最多只允许输入30个字)