该项目来自于 Github 用户 Chalarangelo(文末有项目完整地址, 原版为英文), 目前已在 Github 上获得了 3000 多 Star, 精心收集了多达 48 个有用的 JavaScript 代码片段, 该用户的代码可以让程序员在 30 秒甚至更少的时间内理解这些经常用到的基础算法, 来看看这些 JavaScript 代码都传达出了什么吧!
Anagrams of string(带有重复项)
使用递归对于给定字符串中的每个字母, 为字母创建字谜使用 map()将字母与每部分字谜组合, 然后使用 reduce()将所有字谜组合到一个数组中, 最基本情况是字符串长度等于 2 或 1
数组平均数
使用 reduce()将每个值添加到累加器, 初始值为 0, 总和除以数组长度
大写每个单词的首字母
使用 replace()匹配每个单词的第一个字符, 并使用 toUpperCase()来将其大写
首字母大写
使用 slice(0,1)和 toUpperCase()大写第一个字母, slice(1)获取字符串的其余部分 省略 lowerRest 参数以保持字符串的其余部分不变, 或将其设置为 true 以转换为小写(注意: 这和上一个示例不是同一件事情)
检查回文
将字符串转换为 toLowerCase(), 并使用 replace()从中删除非字母的字符然后, 将其转换为 tolowerCase(), 将 ('') 拆分为单独字符, reverse(),join(''), 与原始的非反转字符串进行比较, 然后将其转换为 tolowerCase()
计数数组中值的出现次数
每次遇到数组中的特定值时, 使用 reduce()来递增计数器
当前 URL
使用 window.location.href 来获取当前 URL
Curry
使用递归如果提供的参数 (args) 数量足够, 则调用传递函数 f, 否则返回一个 curried 函数 f
Deep flatten array
使用递归, 使用 reduce()来获取所有不是数组的元素, flatten 每个元素都是数组
数组之间的区别
使用 filter()移除 value 的部分值, 使用 includes()确定
两点之间的距离
使用 Math.hypot()计算两点之间的欧几里德距离
可以按数字整除
使用模运算符 (%) 来检查余数是否等于 0
转义正则表达式
使用 replace()来转义特殊字符
偶数或奇数
使用 Math.abs()将逻辑扩展为负数, 使用模 (%) 运算符进行检查 如果数字是偶数, 则返回 true; 如果数字是奇数, 则返回 false
阶乘
使用递归如果 n 小于或等于 1, 则返回 1 否则返回 n 和 n - 1 的阶乘的乘积
斐波那契数组生成器
创建一个特定长度的空数组, 初始化前两个值 (0 和 1) 使用 Array.reduce()向数组中添加值, 后面的一个数等于前面两个数相加之和(前两个除外)
过滤数组中的非唯一值
将 Array.filter()用于仅包含唯一值的数组
Flatten 数组
使用 reduce()来获取数组中的所有元素, 并使用 concat()来使它们 flatten
从数组中获取最大值
使用 Math.max()与 spread 运算符 (...) 结合得到数组中的最大值
从数组中获取最小值
使用 Math.min()与 spread 运算符 (...) 结合得到数组中的最小值
获取滚动位置
如果已定义, 请使用 pageXOffset 和 pageYOffset, 否则使用 scrollLeft 和 scrollTop, 可以省略 el 来使用 window 的默认值
最大公约数(GCD)
使用递归基本情况是当 y 等于 0 时在这种情况下, 返回 x 否则, 返回 y 的 GCD 和 x / y 的其余部分
Head of list
返回 ARR[0]
list 初始化
返回 arr.slice(0,-1)
用 range 初始化数组
使用 Array(end-start)创建所需长度的数组, 使用 map()来填充范围中的所需值, 可以省略 start 使用默认值 0
用值初始化数组
使用 Array(n)创建所需长度的数组, fill(v)以填充所需的值, 可以忽略 value 使用默认值 0
列表的最后
返回 arr.slice(-1)[0]
测试功能所花费的时间
使用 performance.now()获取函数的开始和结束时间, console.log()所花费的时间第一个参数是函数名, 随后的参数传递给函数
来自键值对的对象
使用 Array.reduce()来创建和组合键值对
管道
使用 Array.reduce()通过函数传递值
Powerset
使用 reduce()与 map()结合来遍历元素, 并将其组合成包含所有组合的数组
范围内的随机整数
使用 Math.random()生成一个随机数并将其映射到所需的范围, 使用 Math.floor()使其成为一个整数
范围内的随机数
使用 Math.random()生成一个随机值, 使用乘法将其映射到所需的范围
随机化数组的顺序
使用 sort()重新排序元素, 利用 Math.random()来随机排序
重定向到 URL
使用 window.location.href 或 window.location.replace()重定向到 url 传递第二个参数来模拟链接点击 (true - default) 或 HTTP 重定向(false)
反转一个字符串
使用数组解构和 Array.reverse()来颠倒字符串中的字符顺序合并字符以使用 join('')获取字符串
RGB 到十六进制
使用按位左移运算符 (<<) 和 toString(16), 然后 padStart(6,0)将给定的 RGB 参数转换为十六进制字符串以获得 6 位十六进制值
滚动到顶部
使用 document.documentElement.scrollTop 或 document.body.scrollTop 获取到顶部的距离
从顶部滚动一小部分距离
使用 window.requestAnimationFrame()来滚动
随机数组值
使用 Array.map()和 Math.random()创建一个随机值的数组使用 Array.sort()根据随机值对原始数组的元素进行排序
数组之间的相似性
使用 filter()移除不是 values 的一部分值, 使用 includes()确定
按字符串排序(按字母顺序排列)
使用 split('')分割字符串, sort()使用 localeCompare(), 使用 join('')重新组合
数组总和
使用 reduce()将每个值添加到累加器, 初始化值为 0
交换两个变量的值
使用数组解构来交换两个变量之间的值
列表的 tail
返回 arr.slice(1)
数组唯一值
使用 ES6 Set 和... rest 操作符去掉所有重复值
URL 参数
使用 match() 与适当的正则表达式来获得所有键值对, 适当的 map() 使用 Object.assign()和 spread 运算符 (...) 将所有键值对组合到一个对象中, 将 location.search 作为参数传递给当前 url
UUID 生成器
使用 crypto API 生成符合 RFC4122 版本 4 的 UUID
验证数字
使用! isNaN 和 parseFloat()来检查参数是否是一个数字, 使用 isFinite()来检查数字是否是有限的
翻译多有不准确之处, 感兴趣的程序员可以自行到 Github 上查看英文原版(https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates)
- GitHub
- JavaScript
来源: http://www.open-open.com/lib/view/open1513325993894.html