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

前端开发面试题(应届生)-- js基础算法题

程序员文章站 2022-06-09 11:08:53
...

前言

        本文汇集了js的一些基础算法题,很多互联网公司在招聘初级前端开发工程师(应届生)时,都喜欢让应聘者做一些js算法题,这时,若你学会了这些js基础算法题的解题思想对你很有帮助,有一些甚至可以直接套用,所以,建议应届生面试前务必看一遍。

题目

题目1:翻转字符串。

解题思路:1、split()字符串转成数组;2、reverse()翻转数组;3、join()数组转化成字符串。

function reverseString(str){
    var str=str.split("").reverse().join("");		//字符串转成数组.翻转数组.数组转成字符串
    return str;						//返回值
}
alert(reverseString("hello world!"));                   //输出结果:!dlrow olleh


题目2:阶乘。

方法一:while方法

function factorialWhile(num){
    var result=1;
    while(num){
    result*=num;
    num--;
    }
    return result;
}
alert(factorialWhile(5));            //输出结果:120

方法二:for方法

function factorialFor(num){
    if(num<1){
        return 1;
    }else{
        for(var i=num-1; i>=1; i--){
            num*=i;
        }
    }
    return num;
}
alert("for方法二:"+factorialFor(5));        //输出结果:120

方法三:递归方法

function factorial(num){
    if(num<1){
       return 1;
    }
    else{
        return num*factorial(num-1);
    }
}
alert("递归方法三:"+factorial(5));        //输出结果:120


题目3:如果给定的字符串是回文,返回true,反之,返回false。

回文:如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

解题思路:去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

function palindrome(str){
    var str1 = str.replace(/[^0-9a-zA-Z]/g,"").toLowerCase();	//去掉标点符号,转化成小写,比较参数一
    //alert(str1);	//输出:abc1d42efg000h000gfe24d1cba
				
    var str2 = str1.split("").reverse().join("");		//翻转字符串,比较参数二
    //alert(str2);	//输出:abc1d42efg000h000gfe24d1cba
				
    if (str1 === str2) {
        return true;
    } else{
        return false;
    }
}
alert(palindrome("aBc,./1d42--==EFG0   00 h0-';'00gfE';./. 24d 1cBA"));     //输出结果:true


题目4:找到提供的句子中最长的单词,并计算它的长度。

解题思路:1、转化成数组;2、根据元素长度排序;3、输出最长元素并返回长度。

function findLongestString(str){
    var arr = str.split(" ");			    //转化成数组,注意split()括号里为一个空格
    //alert(arr);        //输出:I,love,China
    var aSort = arr.sort(function (a,b){	    //排序
        return b.length-a.length;
    });
    //alert(aSort);	//输出: China,love,I
    document.write("最长单词:"+aSort[0]+"; ");   //第一个元素为最长
    document.write("单词长度:"+aSort[0].length);
}
findLongestString("I love China");        //输出结果: 最长单词:China; 单词长度:5


题目5:确保字符串的每个单词首字母都大写,其余部分小写。

解题思路:1、字符串转化成小写;2、分割成字符串数组;3、新组合字符串元素=首字母转大写+其余小写。

function titleCase(str){
    var aStr = str.toLowerCase().split(" ");		//转小写,分割成字符串数组		
    for(var i=0; i<aStr.length; i++){
        aStr[i] = aStr[i][0].toUpperCase()+aStr[i].slice(1);	//重新组合字符串元素
    }
    var oString = aStr.join(" ");		//转成字符串										
    return oString;
}
document.write(titleCase("I'm a title Case."));    //输出结果:I'm A Title Case.


题目6:一个大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。

解题思路 :找出每个小数组中的最大值,把最大值存入一个新数组里输出。

方法一:使用Math.max.apply()方法提取最大值

function largestArray(arr){
    var result = [];			            //用于存放四个小数组中最大的数
    for (var i=0; i<arr.length; i++) {
        result.push(Math.max.apply(null, arr[i]));    //找出四个小数组中的最大值,然后插入新数组
    }
    return result;
}
document.write(largestArray([[165,2,9], [48,6,9,82],[6,5],[29658,91,2]])+"</br>");//输出结果:165,82,6,29658

方法二:排序法提取最大值

function largestArr(arr){
    var result = [];
    for (var i=0; i<arr.length; i++) {
        arr[i].sort(function(a, b) {		//对四个小数组进行排序,从大到小
            return b-a;
        });
    result.push(arr[i][0]);				//把四个小数组中第一个(最大)添加到result
    }
    return result;
}
document.write(largestArr([[165,2,9], [48,6,9,82],[6,5],[29658,91,2]])+"</br>");//输出结果:165,82,6,29658    


题目7:检查一个字符串(str)是否以指定的字符串(target)结尾。如果是,返回true;如果不是,返回false。

解题思路:截取字符串结尾部分(长度与target相同)与target做比较。

function confirmEnding(str, target){
    var len = target.length;				
    var strEnding = str.slice(-len);		//剪切字符串最后几个字符		
    if (strEnding == target) {
        return true;
    } else{
        return false;
    }
}
document.write(confirmEnding("strawberry", "rry"));    //输出结果:true


题目8:重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。

function repeat(str, num){
var result=str;			        //将初始值赋值给result
    if (num<=0) {
        return "";
    } else{
        for (var i=0; i<num-1; i++) {	//索引从0开始,循环num-1次;(出现的次数包括它本身,所以只需要循环num-1次)
            result+=str;		
        }
        return result;
    }			
}
document.write(repeat("love", 3));        //输出结果:lovelovelove


题目9:截断一个字符串,如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

解题思路:截取相应长度的字符串,然后与...拼接起来。

  • 规定的长度不包括...在内
function truncate(str, num){
    var aStr = str.slice(0, num);
    if (str.length > num) {					
        return aStr.concat("...");
    }
    else{
        return str;
    }
}
document.write(truncate("javascript", 8)+"</br>");    //输出结果:javascri...
  • 规定的长度包括...在内
function truncate(str, num) {
    var str1=str.slice(0,num-3);
    var str2=str.slice(0,num);
    if(str.length > num){
        if(num<=3){
            return str2+'...';
        }else{
            return str1+'...';
        }
    }else{
        return str;
    }
}			
document.write(truncate("javascript", 8));    //输出结果:javas...

题目10:把一个数组arr按照指定的数组大小size分割成若干个数组块。

解题思路:定义一个空数组,使用slice()每次截取原数组的size个元素插入空数组形成一个新数组。

function chunk(arr, size){
    var Array = [];
    if (arr.length > size) {							
        for (var i=0; i<arr.length; i+=size) {			//每次循环size个元素
            Array.push("["+arr.slice(i,i+size)+"]");	//每次截取size元素加入Array(为了便于观察,添加了[])					
        }
        return Array;
        } else{
            return "["+arr+"]";
}				
    }document.write(chunk([1,2,3,4,48,666],2));     //输出结果:[1,2],[3,4],[48,666]


题目11:返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。

function slasher(arr, n){
    var Array = [];
    if (n<=0) {
        return arr;
    } else{
    Array.push(arr.slice(n));				
        return Array;
    }	
}
document.write(slasher([1,516,15,85,3,841], 3));       //输出结果:85,3,841


题目12:如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

解释:["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

function mutation(arr){
    var str1 = arr[0].toLowerCase();
    var str2 = arr[1].toLowerCase();
    for (var i=0; i<str2.length; i++) {
        if (str1.indexOf(str2[i]) <= -1) {	//str2中有元素在str1中找不到
            return false;					
        } 
    }
    return true;
}			
document.write(mutation(["Hello", "hey"]));    //输出结果:true

indexOf()方法解释:可返回某个指定的字符串值在字符串中首次出现的位置。

语法:stringObject.indexOf(searchvalue,fromindex)

关键字:searchvalue,必选,规定需检索的字符串值

     fromindex,可选,从字符串的那个index开始检索

返回值:返回指定值在字符串首次出现的位置,若返回-1,则字符串中不包含改值。


题目13:删除数组中的所有假值。在JavaScript中,假值有false、null、0、""、undefined 和 NaN。

function bouncer(arr){
    return arr.filter(test);		//filter方法过滤得到符合条件的值
}
// 条件函数
function test(ele){
    var cont = ele !== false || ele !== null || ele !== 0 || ele !== "" || ele !== undefined || ele !==NaN;
    if (cont) {				//如果cont成立
        return ele;
    }				
}			
document.write(bouncer([561, "hello", true, false, ""]));    //输出结果:561,hello,true

Array.filter() :检查数组得到符合指定条件(fn)的所有元素。

语法:array.filter(function(currentValue,index,arr), thisValue)

关键字:currentValue,必选,当前元素的值; index,可选,当前元素的索引; arr,可选,当前元素所属的数组。thisvalue,可选,对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"


查看更多js面试题:https://blog.csdn.net/mr_javascript/article/details/79769572

-------------------------------------------- end ----------------------------------------------

参考文章:https://www.cnblogs.com/mr-wuxiansheng/p/6534910.html