2019前端面试题总结
常考的数组方法:
(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));
上一篇: 2019前端面试题
下一篇: PHP7的安装步骤教程