欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2019前端面试题总结

程序员文章站 2022-03-04 12:14:21
...

常考的数组方法:
(1)、arr.join():将数组元素串起来组成字符串
(2)、arr.sort():按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。
(3)、arr.reverse():反转数组项的顺序。
(4)、arr.concat():将参数添加到原数组中。这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
(5)、arr.slice():
返回从原数组中指定开始下标到结束下标之间的项组成的新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。 如果有参数是负数,则把负数项加数组的长度。 例如:arr.slice(-1,-4)==arr.slice(arr.length-1,arr.length-4);
(6)、arr.splice():
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项。

插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除任何项,则返回一个空数组。(不会生成一个副本,而是会直接改变原数组,并且会返回一个新的数组)

(7)、indexOf()和 lastIndexOf():(返回索引值)
indexOf(从左向右):
一个参数:要查找项
两个参数:第一个参数表示要查找的项,第二个表示要查找的开始索引。查询不到会返回-1
lastIndexOf(从右向左):但是数索引的时候还是要从左往右数
(8)、forEach():
对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(x,index,b){
console.log(x,index,b);
})
(9)、map():
指“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。这个方法有返回值。
(10)、filter():
“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。
(11)、every()和some()
every:对数组的每一项都满足条件才返回true;
some:对数组的其中一项满足条件就返回true;
详情参考:js数组方法大全

1、随机打乱一个字符串

//随机打乱一个字符串
    var  str="idfjdifndi";
    function suffle(str) {
        var arr=str.split("");//把字符串变成数组
        var len=arr.length;
        for(var i=0;i<len;i++){
            var randomIndex=Math.floor(Math.random()*len);//随机生成一个下标
            var itemIndex=arr[randomIndex];
            arr[randomIndex]=arr[i];
            arr[i]=itemIndex;
        }
        return arr.join().replace(/,/g,"");//替换掉生成的字符串中的逗号。
    }

    console.log(suffle(str)); //typeof:string

二、递归实现1x2+3x4+5x6+…+(n-1)n

//注意审题是递归实现,而不是用for循环
 function digui(n) {
        if(n==1){
            return 1;
        }
        return n*digui(n-1);
    }

    console.log(digui(5));

三、打印题:

var arr1=new Array(6);//[ , , , , , ]长度为6的空字符串
var arr2=new Array(6,6);//[6,6]

 for(var i=0;i<10;i++){
        setTimeout(function () {
            console.log(i)
        },i*1000)
    }//10个10

for(let i=0;i<10;i++){
        setTimeout(function () {
            console.log(i)
        },i*1000)
    }//0,1,2,3,4,5,6,7,8,9

 var foo=1;
    (function () {
        foo=2;
        function foo() {
        }
        console.log(foo);//2

    })();
    console.log(foo);//1

Array.isArray(Array.prototype)//true
console.log(Array.prototype)//typeOf:Object
==只有Array.prototype是数组,其他是对象==


   [1,2,3].map(parseInt)//[1, NaN, NaN]

四、逆序一个字符串

  function reserveStr(str) {
        return str.split('').reverse().join('');
    }
    console.log(reserveStr("nice"));

五、输出字符串中没有重复的项

//比较愚蠢的办法
  var str='abcabagmmfd'//输出cgfd
    function noRepeatString(str){
        var arr=str.split('');
        var arr1=[];
        var arr2=[];
        var arr3=[];
        var arr4=[];
     /*   arr.forEach(function (obj,n,m) {
            //console.log(obj);
            if(arr1.indexOf(obj)==-1){
                t++;
                console.log(t);
                arr1.push(obj);
            }
        });*/
        for(var i=0;i<arr.length;i++){
           if(arr1.indexOf(arr[i])==-1){
               arr1.push(arr[i]);
           }
        }

        for(var i=0;i<arr1.length;i++) {
            var t=0;
            for (var j = 0; j< arr.length; j++) {
                if (arr1[i] == arr[j]) {
                    t++;
                    if(t>1){
                        arr2.push(arr1[i])
                    }
                }
            }
        }

        for(var i=0;i<arr2.length;i++){
            if(arr3.indexOf(arr2[i])==-1){
                arr3.push(arr2[i]);
            }
        }
        console.log(arr3);

        for(var i=0;i<arr1.length;i++){
            if(arr3.indexOf(arr1[i])==-1){
                arr4.push(arr1[i]);
            }
        }

        return arr4.join('');
    }
    console.log(noRepeatString(str));

六、斐波那契数列的前n项

一个数列:1、1、2、3、5、8、13、21、34、……求出第100个数是多少?

    function fib(num) {
        var arr = [];
        if(num == 1){
            return arr = [1];
        }else if(num == 2){
            return arr = [1,1];
        }else{
            arr = [1,1];
            var a=1;
            var b=1;
            var c=2;
            var arrlen =arr.length;
            for(var i=2;i<num;i++){
                arr.push(c);
                a=b;
                b=c;
                c=a+b;
            }
            return arr[num-1];

        }

    }

console.log(fib(100));