美文网首页
收藏一些es6优质代码(持续更新...)

收藏一些es6优质代码(持续更新...)

作者: 广告位招租 | 来源:发表于2019-04-10 18:23 被阅读0次

    再开一坑

    收藏一些写的很好的很精炼的代码片段(偏个人向),大部分是利用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
    

    相关文章

      网友评论

          本文标题:收藏一些es6优质代码(持续更新...)

          本文链接:https://www.haomeiwen.com/subject/dqmoiqtx.html