与函数有关面试题(一)

来源:互联网 发布:淘宝上的iphone6s 编辑:程序博客网 时间:2024/06/05 02:55
  1. 如何将字符串进行反转
    解题思路:字符串本身没有反转方法,先将字符串转为数组,再用reverse()方法
    将字符串转为数组=》用slice(“”)方法,对数组进行空气分割,转化成数组。
    代码如下:
   var abc="abcdergfdfgdfg";    var def=abc.slice("");    console.log(def.length);    var result=[];    function fun() {        for (var i = 0; i < def.length; i++) {            result[i] = def[i]        }        return result.reverse();    }    console.log(fun().toString());

最后得到的结果就是反转后的字符串

2.检测字符串是否为回文
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
思路如下:正则匹配出所有的标点符号,大小写,空格,匹配后的结果与该结果反转后值相等,则为回文,反之为非回文。
代码如下:
方法1。正则表达式match匹配

function palindrome(str) {var result=[];var reg=/[0-9a-zA-Z\+]+/g;str = str.match(reg).join("").toLowerCase();for(var i=0;i<str.length;i++){    result.push(str[i])}var newstr=result.reverse();if(newstr.join("").toLowerCase()==str)  {    return true;}else{     return false; }}document.write(palindrome("eye123"));

方法二。正则表达式replace替换,正则表达式可以通过“^”符号作为左方括号内的第一个字符,表示否定字符类=》非或者说取反。

function palindrome(str) {var result=[];str=str.replace(/[^[a-z0-9A-Z+]+/g,"");for(var i=0;i<str.length;i++){result.push(str[i]);}var newstr=result.reverse();if(newstr.join("").toLowerCase()==str.toLowerCase())  {return true;}else{return false;}}palindrome("eye");

3.M选N

<!DOCTYPE html><html lang="zh-cn"><head>    <meta charset="UTF-8">    <title>Javascript</title></head><body><script >    var st=new Date().getTime();    function arrayCombine(targetArr) {        if(!targetArr || !targetArr.length) {            return [];        }        var len = targetArr.length;        var resultArrs = [];        // 所有组合        for(var n = 1; n < len; n++) {            var flagArrs = getFlagArrs(len, n);            while(flagArrs.length) {                var flagArr = flagArrs.shift();                var combArr = [];                for(var i = 0; i < len; i++) {                    flagArr[i] && combArr.push(targetArr[i]);                }                resultArrs.push(combArr);            }        }        return resultArrs;    }    /**     * 获得从m中取n的所有组合     */    function getFlagArrs(m, n) {        if(!n || n < 1) {            return [];        }        var resultArrs = [],                flagArr = [],                isEnd = false,                i, j, leftCnt;        for (i = 0; i < m; i++) {            flagArr[i] = i < n ? 1 : 0;        }        resultArrs.push(flagArr.concat());        while (!isEnd) {            leftCnt = 0;            for (i = 0; i < m - 1; i++) {                if (flagArr[i] == 1 && flagArr[i+1] == 0) {                    for(j = 0; j < i; j++) {                        flagArr[j] = j < leftCnt ? 1 : 0;                    }                    flagArr[i] = 0;                    flagArr[i+1] = 1;                    var aTmp = flagArr.concat();                    resultArrs.push(aTmp);                    if(aTmp.slice(-n).join("").indexOf('0') == -1) {                        isEnd = true;                    }                    break;                }                flagArr[i] == 1 && leftCnt++;            }        }        return resultArrs;    }    var abs=getFlagArrs(20, 10);    function index(){        var result=[];    for(var j=0;j<abs.length;j++) {        for (var i = 0; i < abs[j].length; i++) {                if (abs[j][i] == 1) {                 result.push(i);                }        }    }        return result;}    function split_array(arr,len){        var a_len=arr.length;        var result1=[];        for(var i=0;i<a_len;i+=len){            result1.push(arr.slice(i,i+len))        }        return result1;    } var s=split_array(index(),10); for(var key in s){     console.log(s[key].join(" ")) }    var st2=new Date().getTime() - st;console.log("上面代码的执行时间为"+st2+"毫秒");</script></body></html>

4.找出字符串中最大的单词
代码如下:

   function findLongestWord(str) {       str=str.split(" ");        var j=str[0].length;        for(var i=1;i<str.length;i++){            if(j<str[i].length){                j=str[i].length;            }        }        return j;    }    console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));

5.将字符串变为驼峰式,单词首字母大写,其余小写。
代码如下:

    function titleCase(str) {        str = str.split(' ');        for (i = 0; i < str.length; i++) {            str[i] = str[i].toLowerCase().split('');            str[i][0] = str[i][0].toUpperCase();            str[i] = str[i].join('');        }        return str.join(' ');    }    console.log(titleCase("i'm a little tea pot"));

5.找出二维数组中,每组数的最大值,并放入一个新集合。

 function largestOfFour(arr) {         var result = [];         for (var i = 0; i < arr.length; i++) {             var max = arr[i][0];             for (var j = 1; j < arr[i].length; j++) {                 if (arr[i][j] > max) {                     max = arr[i][j];                 }             }             result.push(max);         }         return result;     }     largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])

6.一个函数,删除数组中的值。第一个参数是待删除的数组,其余的参数是待删除的值
代码如下:
function destroyer(){
var args=[].slice.call(arguments),arr=args.shift();
for(var i=arr.length-1;i>=0;i--)
args.indexOf(arr[i])!=-1&&arr.splice(i,1);
return console.log(arr);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

7.去除数组中所有的false, null, 0, NaN, undefined, “”(空字符串)
代码如下:

function bouncer(arr) {        for (var i= arr.length - 1;  i>-1; i--) {            (arr[i] == undefined)&&arr.splice(i, 1);//判断一个值等于null或者undefined,是则删除该值           (arr[i]==false)&&arr.splice(i, 1);//判断一个值等于空字符串或者false或者0,是则删除该值            (isNaN(arr[i])&&typeof arr[i]=="number")&&arr.splice(i, 1);//判断一个值全等于NAN,是则删除该值        }        return console.log(arr);    }    bouncer([7, "ate", "", false, 9]);    //should return [7, "ate", 9].    bouncer(["a", "b", "c"]);    //should return ["a", "b", "c"].    bouncer([false, null, 0, NaN, undefined, ""]);    // should return [].    bouncer([1, null, NaN, 2, undefined]);    //should return [1, 2].

8.函数记忆

        //什么是函数记忆: 让函数记住曾经处理过的参数以及参数对应的处理结果        //为什么: 函数本身没有记忆,导致重复计算        //何时: 只要一个函数,可能反复用于计算        //如何: 闭包        //判断一个数是不是质数    function isPrime1(n){        if(n<=3) return true;        else if(n%2==0) return false;        else{            for(var i=3;i<=Math.sqrt(n);i+=2){                if(n%i==0) return false;            }            return true;        }    }var isPrime2=(function(){    var hash={};    return function(n){        if(n<=3) return true;        else if(n%2==0) return false;        else if(hash[n]!==undefined)            return hash[n];        else{            for(var i=3;i<=Math.sqrt(n);i+=2){                if(n%i==0) {                    hash[n]=false;                    return false;                }            }            hash[n]=true;            return true;        }    }})();//isPrime2:function(n){...}(hash:{...})for(var i= 0,arr=[];i<1000000;i++){    arr.push(        parseInt(Math.random()*1000+9000)    );}console.time("isPrime1");for(var i= 0;i<arr.length;i++){    isPrime1(arr[i]);}console.timeEnd("isPrime1");console.time("isPrime2");for(var i= 0;i<arr.length;i++){    isPrime2(arr[i]);}console.timeEnd("isPrime2");

9.快速排序

var arr=[1,2,8,9,5,4,7];function sortArr(arr){    for(var i=1;i<arr.length;i++){        var t=arr[i];        var p=i-1;       while(arr[p]>t&&p>=0){           arr[p+1]=arr[p];           p-=1;       }      arr[p+1]=t;    }}sortArr(arr);console.log(arr);

10.数组去重

var arr=[1,2,1,3,2,1,4,3,1,2];function repeat1(arr){  var result=[];  for(var i=0;i<arr.length;i++){    //for(var j=0;j<result.length;j++){    //  if(arr[i]==result[j])    //    break;    //}    //if(j==result.length)    if(result.indexOf(arr[i])==-1)      result.push(arr[i]);  }  return result;}function repeat2(arr){  var result=[];  var hash={};  for(var i=0;i<arr.length;i++){    if(hash[arr[i]]===undefined){      hash[arr[i]]=1;      result.push(arr[i]);    }  }  return result;}function repeat3(arr){  return arr.sort((a,b)=>a-b)             .join("")             .replace(/(\w)\1*/ig,kw=>kw[0])             .split("");}arr=repeat3(arr);console.log(String(arr));//for(var i= 0,arr=[];i<1000000;i++){//  arr.push(//      parseInt(Math.random()*9000+1000)//  );//}//console.time("repeat1");//repeat1(arr);//console.timeEnd("repeat1");//console.time("repeat2");//repeat2(arr);//console.timeEnd("repeat2");

11.找到排序后的下标

function getIndexToIns(arr, num) { arr.push(num); arr.sort((a,b)=>a-b); for(var i=0;i<arr.length;i++){     if(arr[i]==num){         return (i);     } }}getIndexToIns([40, 60], 50);getIndexToIns([10, 20, 30, 40, 50], 35)//should return 3.getIndexToIns([10, 20, 30, 40, 50], 30)//should return 2.getIndexToIns([40, 60], 50)//should return 1.getIndexToIns([3, 10, 5], 3)//should return 0.getIndexToIns([5, 3, 20, 3], 5)//should return 2.getIndexToIns([2, 20, 10], 19)//should return 2.getIndexToIns([2, 5, 10], 15)//should return 3.

12.rot13解码

function rot13(str) { // LBH QVQ VG!    var arr = str.toUpperCase().split(" ");    var str1 = [];    for (var i = 0; i < arr.length; i++) {        var arr1 = arr[i].split("");        for (var j = 0; j < arr1.length; j++) {            var num = arr1[j].charCodeAt();            if (num >= 65 && num <= 90) {                arr1[j] = num + 13 > 90 ? String.fromCharCode(64 + (num + 13 - 90)):String.fromCharCode(num + 13);  //64 + (num + 13 - 90) 要明白为什么是64 ,            }        }        str1.push(arr1.join(""));    }    return str1.join(" ");}// Change the inputs below to testconsole.log(rot13("SERR PBQR PNZC"));

13.找出两个数组的不同项
代码如下:
注意:NaN的布尔值是false;

function diffArray(arr1, arr2) {    var c=[];    // Same, same; but different.    var newArr=arr1.concat(arr2);    var o={};    for(var i=0;i<newArr.length;i++){        (newArr[i] in o)? o[newArr[i]]++ : o[newArr[i]] = 1 ;    }    for (var x in o) if (o[x] == 1) {c.push(x);}    for(var i=0;i<c.length;i++){        if(parseInt(c[i])){            c[i]=parseInt(c[i])        }      }    return c;}

14.阿拉伯数字转成罗马数字

var convertToRoman = function(num) {  var decimalValue = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];  var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];  var romanized = '';  for (var index = 0; index < decimalValue.length; index++) {    while (decimalValue[index] <= num) {      romanized += romanNumeral[index];      num -= decimalValue[index];    }  }  return romanized;}convertToRoman (36);

更多函数式编程笔试题,请查看与函数有关面试题(二)………

原创粉丝点击