3a3b4c3...">
美文网首页
前端面试常见算法总结(中)

前端面试常见算法总结(中)

作者: isSunny | 来源:发表于2019-07-14 16:00 被阅读0次

    3.实现一个简单的字符串压缩算法

    例如:var str = "aaabbbccccfff" =>3a3b4c3f

    function compression(str){
            var str1 = "";
            var num = 1;
            for(var i=0;i<str.length;i++){
                if(str.charAt(i)==str.charAt(i+1)){
                    num++;
                }else{
                    str1 +=num;
                    str1 +=str.charAt(i);
                    num = 1;
                }
            }
            return str1;
        }
    var s = "aaabbbccccfff";
    console.log(compression(s))//3a3b4c3f
    

    4.实现数组扁平化的几种方法

    1.reduce:

    var arr1 = [1,2,4,[2,3,4,[2,56]]];
    function fn(arr){
        return arr.reduce(function(pre,cur){
            return pre.concat(Array.isArray(cur)?fn(cur):cur)
        },[])
    }
    
    console.log(fn(arr1));//[1, 2, 4, 2, 3, 4, 2, 56]
    

    2.es6中"..."扩展符

    function fn1(arr){
        while(arr.some(item=>Array.isArray(item))){//利用arr.some判断当数组中是否有数组
            arr =[].concat(...arr)
        }
        return arr;
    }
    console.log(fn(arr1));//[1, 2, 4, 2, 3, 4, 2, 56]
    
    这里说一下some和every区别

    首先都是迭代的方法,返回的是boolean值

    every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。
    some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。

    3.递归

    function flatten(arr){
        var newArr = [];
        for(var i=0;i<arr.length;i++){
            if(Array.isArray(arr[i])){
                newArr = newArr.concat(flatten(arr[i]));
            }else{
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    console.log(flatten(arr1));//[1, 2, 4, 2, 3, 4, 2, 56]
    

    4.利用apply

    function flatten1(arr){
        while(arr.some(item=>Array.isArray(item))){
            arr = [].concat.apply([],arr);
        }
        return arr;
    }
    console.log(flatten1(arr1));//[1, 2, 4, 2, 3, 4, 2, 56]
    

    5.flat()
    默认1层,如果不管有多少层都要转成一维数组,可以用Infinity关键字作为参数。

    arr1.flat(Infinity)//[1, 2, 4, 2, 3, 4, 2, 56]
    

    相关文章

      网友评论

          本文标题:前端面试常见算法总结(中)

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