手撕JavaScript面试题

简介: 手撕JavaScript面试题

阶乘

问题 1:

请补全JavaScript函数,要求返回数字参数的阶乘。

注意:参数为大于等于0的整数。

function _factorial(number) {
    // 补全代码
    if(number==1){
        return 1;
    }
    else{
        return number*_factorial(number-1);
    }
}

微信图片_20220927112835.png总结:

🥭🥭1、当传递进来的number为1的时候直接return 1【返回为1】,因为1的阶乘为1。

🥭🥭2、当传递进来的参数number不为 1 ,也就是else里面情况,每次迭代 函数(number-1),number会慢慢减少,等到number直接返回1【return 1】

绝对值

问题 2:

请补全JavaScript函数,要求返回数字参数的绝对值。

function _abs(number) {
    // 补全代码
    return Math.abs(number);
}

微信图片_20220927112913.png总结:


🥭🥭一、abs是absolute的缩写,是Math里面的一个方法,除了abs还有其他方法,例如。

1.Math.abs() Math.abs()函数,返回一个数的绝对值 Math.abs(-10) // 10

2.Math.ceil() Math.ceil()函数,返回大于或等于一个给定数的最小整数。 Math.ceil(5.4) // 6

3.Math.cos() Math.cos()函数,返回一个值的余弦值。 Math.sin(90 * Math.PI / 180) // 1

4.Math.floor() Math.floor()方法,返回小于或等于一个给定数字的最大整数 Math.floor(5.7) // 5 Math.floor(8.6) // 8

问题 3:

请补全JavaScript函数,要求返回底数为第一个参数,幂为第二个参数的数值。


解答:

function _pow(number,power) {
    // 补全代码
    if (power === 0) {
        return 1
    }
    let res = number
    for (let i = 1; i < power; i++) {
        res *= number
    }
    return res
}

微信图片_20220927112951.png总结:

🥭🥭1、2^3= 2 * 2 * 2=8,for循环当,有多少循环多少次。方法很多,经供参考。例如:

function _pow(number,power) {
    // 补全代码
    return power = 0? 1 : number *=number
}

🍓💖🍓💖 可能有些小伙伴power = 0? 1 : number *=number不太明白,这是一个三元运算符。

当power=0为真则为1,否则则执行number *=number


条件表达式?True:False

平方根

问题 4:

请补全JavaScript函数,要求返回数字参数的平方根。

注意:只需检测基本数据类型。


解答:

function _sqrt(number) {
    // 补全代码
    return Math.pow(number,0.5);
}

微信图片_20220927113044.png总结:
🥭🥭1、Math.pow(number,0.5);
🥭🥭 2、0.5改为2 就是平方跟,改为3就是立方跟。

当然也有复杂的解法:

function _sqrt(number) {
    // 补全代码
    let sum = number
    while(true) {
      number--
      if(number > 0) {
        if (sum%number === 0){
            return number
        }
      } else {
          return false
      }
    }
}

余数

问题 5:

请补全JavaScript函数,要求返回数字参数除以2的余数。

解答:

function _remainder(value) {
    // 补全代码
    return value-(value>>2);
}

微信图片_20220927113140.png总结

🥭🥭1、除了上面之外还有很多种方法。例如

    return value - @ * parseInt(value / 2)
    return value % 2    //对2取余数

数据类型转换

问题 6:

请补全JavaScript函数,要求以字符串的形式返回数字参数所对应的星期。

示例:

1、_getday(1) -> “星期一”

2、 _getday(7) -> “星期天”

解答:

function _getday(value) {
    // 补全代码
    var map = {
        1:'一',
        2:'二',
        3:'三',
        4:'四',
        5:'五',
        6:'六',
        7:'天'
    }
    return '星期'+map[value];
}

微信图片_20220927113244.png总结:

🥭🥭方法很多,你还可以这样

function _getday(value) {
    // 补全代码
    return `星期${[,'一','二','三','四','五','六','天'][value]}`
}
function _getday(value) {
    // 补全代码
    let dayData = ['一','二','三','四','五','六','天'];
    return '星期' + dayData[value - 1]
}

从大到小排序

问题 7:

请补全JavaScript函数,要求将数组参数中的数字从大到小进行排序并返回。

function _sort(array) {
    return array.sort((a,b) => b - a);
}

微信图片_20220927113351.png总结:

🥭🥭排序有很多种方法,但是最主要的只有两种,上面一种是自带的sort排序。下面来看选择排序和冒泡排序吧

选择排序

// 法一:选择排序
function _sort(array) { 
    for(let i = 0; i < array.length; i++) {
        for(let j = i + 1; j < array.length; j++) {
            if(array[i] < array[j]) {
                let temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}

冒泡排序

function _sort(array) {
    for(let i = 0; i < array.length; i++) {
        for(var j = 0; j < array.length - i - 1; j++) {
            if(array[j] < array[j + 1]) {
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        } 
    }
    return array;
}

大写字符串

问题 6:

请补全JavaScript函数,要求将字符串参数转换为大写字符串并返回。

function _touppercase(string) {
  const arr = []
  for(let i = 0; i < string.length; ++ i) {
     const codePoint = string.codePointAt(i)
     if(codePoint >= 97 && codePoint <= 122) {
       const charactor = String.fromCodePoint(codePoint - 32)
      arr[i] = charactor
     } else {
        arr[i] = string.charAt(i)
     }
  }
  return arr.join('')
}

微信图片_20220927113502.png总结:

难道这么繁琐,当然不是,在Javascripts中早已经封装好了toUpperCase()方法,只需要拿来用就可以了。

function _touppercase(string) {
    // 补全代码
    return string.toUpperCase();
}

Math部分常用方法总结

🥭🥭一、abs是absolute的缩写,是Math里面的一个方法,除了abs还有其他方法,例如。

1.Math.abs() Math.abs()函数,返回一个数的绝对值 Math.abs(-10) // 10

2.Math.ceil() Math.ceil()函数,返回大于或等于一个给定数的最小整数。 Math.ceil(5.4) // 6

3.Math.cos() Math.cos()函数,返回一个值的余弦值。 Math.sin(90 * Math.PI / 180) // 1

4.Math.floor() Math.floor()方法,返回小于或等于一个给定数字的最大整数 Math.floor(5.7) // 5 Math.floor(8.6) // 8



目录
相关文章
|
2月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
46 3
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
3月前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
60 3
|
3天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
13 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
21天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
3月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
37 0
|
3月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
3月前
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码
|
3月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
4月前
|
缓存 JavaScript 前端开发
js高频面试题,整理好咯
中级前端面试题,不低于12k,整理的是js较高频知识点,可能不够完善,大家有兴趣可以留言补充,我会逐步完善,若发现哪里有错,还请多多斧正。