常用前端面试题

日期:2018年11月14日 阅读次数:1944 分类:javascript前端

1、【数据去重】——数组循环+splice的方法

// 方法一:常规方法
var arr = [ 1,2,2,4,2 ];

for ( var i=0; i<arr.length; i++ ) {
    for ( var j=i+1; j<arr.length; j++ ) {
        if ( arr[i] == arr[j] ) {
            arr.splice( j, 1 );
            j--;
        }
    }
}
alert( arr );

// 方法二:Set
var arr = [ 1,2,2,4,2 ];
alert([...new Set(arr)])

 

2、【找重复项最多的字符和个数】——正则的重复子项

var str = 'assssjdssskssalsssdkjsssdss';
var arr = str.split('');
str = arr.sort().join('');

var value = '';
var index = 0;

var re = /(\w)\1+/g;
str.replace(re,function(0,1){
    if(index<0.length){
        index =0.length;
        value = $1;
    }
});

alert('最多的字符:'+value+',重复的次数:'+index);

 

3、检测字符串是否是“以字母开头,数字结束”

var reg = /^[a-zA-Z].*\d$/;
var str = "s)*&)1";
reg.test(str);

 

4、字符串反转

str.split("").reverse().join("");

 

5、垂直方向居中

display:flex;
flex-direction:column;
justify-content:center;

 

6、一行内文字超出时,以……表现

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

 

7、闭包试题

function fun(n,o){
    console.log(o);
    return {
        fun:function(m){//[2]
            return fun(m,n);//[1]
        }
    }
}

var a=fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b=fun(0).fun(1).fun(2).fun(3);
var c=fun(0).fun(1);
c.fun(2);
c.fun(3);

为了更好理解,等价转换为

function _fun_(n,o){
    console.log(o);
    return {
        fun:function(m){
           return _fun_(m,n);
        }
    }
}

var a=_fun_(0);//undefined
a.fun(1);//0
a.fun(2);//0
a.fun(3);//0

var b=_fun_(0).fun(1).fun(2).fun(3);
//undefined,0,1,2

var c=_fun_(0).fun(1);//undefined,0,
c.fun(2);//1
c.fun(3); //1

 
详细解释

文章标签: