再开一坑
收藏一些写的很好的很精炼的代码片段(偏个人向),大部分是利用es6语法实现精简化,没有排名,不分先后
斐波那契数列
// 执行之后返回一个传入参数长度的斐波那契数列
const feibo = max => {
let [a, b, i] = [0, 1, 1],
arr = [];
while (i++ <= max) {
[a, b] = [b, a + b]
arr.push(b)
}
return arr
}
// 执行之后返回斐波那契数列的第n项
const feibo = max => {
let [a, b, i] = [0, 1, 1]
while (i++ <= max) {
[a, b] = [b, a + b]
}
return b
}
注[1]: 什么是斐波那契数列
快排
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
let qsort = (list) => {
if( list.length === 0 ){
return []
}
let [x, ...xs] = list
return [...qsort(xs.filter(u => u <= x)), x, ...qsort(xs.filter(u => u > x))]
}
求平均数
const average = arr => arr.reduce((acc, val) => acc + val, 0) / arr.length;
reduce(callback,[initialValue])累加器
功能:reduce方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值
参数:回调函数和上一次调用返回的值或者是提供的初始值(initialValue)
返回值:reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组
var result = arr.reduce(function(x,y){ return x*y; },0); //这里0的意思是将会从0开始累乘;用时需要给出别的初始值;
大小写转换
将连字符转换成驼峰
function camelCase(string){
return string.replace( /-([a-z])/g, function( all, letter ) {
return letter.toUpperCase();
});
}
这里说一下replace()
stringObject.replace(regexp/substr,replacement)
regexp/substr: 必需。规定子字符串或要替换的模式的 RegExp 对象。
replacement: 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
举个栗子
function camelCase(string){ return string.replace( /_([a-z])([a-z])/g, function( x, y, z, m, n ,l) { console.log(x, y, z, m, n, l) return y.toUpperCase(); }); } camelCase('asd_asfq_gqwva') // _as a s 3 asd_asfq_gqwva undefined // _gq g q 8 asd_asfq_gqwva undefined
数组扁平化
const deepFlatten = arr =>
arr.reduce((a, v) => a.concat(Array.isArray(v) ? deepFlatten(v) : v), []);
// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5]
数组去重
let arr = [1,2,3,4,5,2,5,1,2]
let new arr = [...new Set(arr)]
判断数组之间的区别
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); };
// difference([1,2,3], [1,2]) -> [3]
阶乘
const factorial = n => n <= 1 ? 1 : n * factorial(n - 1);
// factorial(6) -> 720
最大公约数
const gcd = (x, y) => !y ? x : gcd(y, x % y);
// gcd (8, 36) -> 4
网友评论