JavaScript面试题库

Posted wanghao123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript面试题库相关的知识,希望对你有一定的参考价值。

一、编码(初级)

 1.isPrime - 返回truefalse, 表示输入的数是否为质数

 1 /**
 2  * 判断一个数是否为质数
 3  * @param num
 4  */
 5 function isPrime(num) {
 6   if (num === 2 || num === 3 || num === 5) {
 7     return true;
 8   }
 9   if (num < 2 || !isInteger(num) || !isNum(num) || !isDual(num)) {
10     return false;
11   }
12   for (var i = 2; i < num / 2 + 1; i++) {
13     if (num % i === 0) {
14       return false;
15     }
16   }
17   return true;
18 }
19 
20 /**
21  * 判断是否是整数
22  */
23 function isInteger (num) {
24   return num === ~~num ? true : false;
25 }
26 
27 /**
28  * 判断是否是数字
29  */
30 function isNum (num) {
31   return num === +num ? true : false;
32 }
33 
34 /**
35  * 判断数字末尾是否是2或者5
36  */
37 function isDual (num) {
38   var num  = num.toString();
39   var lastNum = num.substring(num.length - 1, num.length);
40   return lastNum %2 === 0 || lastNum % 5 === 0 ? false : true;
41 }

 2.factorial - 返回给定数的阶乘的值

1 /**
2  * 返回指定数的阶乘
3  * @param n
4  */
5 function factorial(n) {
6   return n > 1 ? n * factorial(n - 1) : n
7 }

3.fib -返回斐波那契数列的前n项的和(n为给定)

 1 /**
 2  * 返回斐波那契数列的前n项的和(n为给定)
 3  * @param n
 4  */
 5 function fibSum(n) {
 6   return n > 1 ? fib(n) + fibSum(n - 1) : fib(n)
 7 }
 8 
 9 /**
10  * 返回斐波那契数列的第n项
11  * @param n
12  */
13 function fib (n) {
14   return (n === 1 || n === 2) ? 1 : fib(n - 1) + fib(n - 2)
15 }

4.isSorted - 返回truefalse,表示给定的数组是否被排序过

 1 /**
 2  * 表示给定的数组是否被排序过
 3  * @param arr
 4  * @returns {boolean}
 5  */
 6 function isSorted(arr) {
 7   return (arr.toString() === arr.sort().toString())
 8       || (arr.toString() === arr.sort((a, b) => {return b > a}).toString())
 9       ? true : false
10 }

5.filter - 实现过滤器功能(filter([1, 2, 3, 4], n => n < 3)    // [1, 2])

 1 /**
 2  * 实现数组过滤功能
 3  */
 4 Array.prototype.filterT = Array.prototype.filterT || function (func) {
 5   var arr = this, brr = [];
 6   for (var i = 0; i < arr.length; i++) {
 7     if (func(arr[i])) {
 8       brr.push(arr[i])
 9     }
10   }
11   return brr;
12 }

6.reduce- 实现reduce 函数

 1 /**
 2  * 实现reduce函数
 3  */
 4 Array.prototype.reduceT = Array.prototype.reduceT || function (func) {
 5   var arr = this, sum = arr[0];
 6   for (var i = 1; i < arr.length; i++) {
 7     sum = func(sum, arr[i]);
 8   }
 9   return sum
10 }

7.reverse- 反转给定字符串 (用已封装好的 reverse 是一个cheat,要自己实现)

1 /**
2  * 反转字符串
3  */
4 function reverse(str) {
5   return str.split("").reverse().join("")
6 }

8.indexOf - 实现数组的 indexOf方法

 1 /**
 2  * 实现数组的 indexOf方法
 3  * @type {*|Function}
 4  */
 5 Array.prototype.indexOfT = Array.prototype.indexOfT || function (b) {
 6   var arr = this;
 7   for (var i = 0; i < arr.length; i++) {
 8       if(arr[i] === b) return i;
 9   }
10   return -1;
11 }

9.isPalindrome - 返回true或false判断给定字符串是否是一个回文(palindrome)(大小写不敏感)

 

10.missing - 一个数字1至n不重复且未排序过的数字组成的数组,从数字1至数字n选取出不重复且未排序过的数字组成数组(n为最大的数),调用方法后补全数组里缺失的数字。是否可以设计出时间复杂度为O(n)的算法?提示:有个聪明的方法供你使用

 

11.isBalanced - 用truefalse表示给定的字符串的花括号是否平衡(一一对应)

 

二、编码(中级)

 

1.fib2 - 实现像上面的fib函数一样的功能,但是要能够算出数列中前50位以上的数的和。(小提示: 从内存中查询)

 

2.isBalanced2 - 实现同上面的isBalanced函数相同的功能,但是要支持三种类型的括号{},[],和()。带有交错括号的字符串应该返回false。

 

3.uniq - 选取一个由数字组成的数组,为其去重,返回去重后的数组。可以实现出时间复杂度为O(n)的算法吗?

 

4.intersection - 算出两个数组的交集(公共部分)。可以实现时间复杂度为O(M+N)(M和N为两个数组的长度)的方法吗?

 

5.sort -实现 sort 方法,用于排序元素为数字的数组, 且时间复杂度为O(N×log(N))

 

6.includes - 判断给定的数字是否出现在给定的已排列好的数组中,返回truefalse。是否能设计出时间复杂度为O(log(N))的算法?

 

7.assignDeep- 仿照 Object.assign, 但是要深度合并对象。为了简单起见,可以假设对象只包含数字或是什么别的(而不是数组、函数等)。

 

8.reduceAsync- 仿照reduce 你在“简单”部分中完成了,但每个条目都必须在进行下一步之前被解决。

 

9.用reduceAsync来实现seqseq使用一个可返回 promise的函数体内使用数组的函数,然后逐一的解决。

 

以上是关于JavaScript面试题库的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript算法题实现-146-LRU缓存机制——腾讯面试题库

下载超过 28762W 次的 Java面试题库(附答案)

牛客网最热门的 Java 面试题库(附答案),终于整理好了

python面试题库

Github知乎下载超过 28762W 次的 面试题库(附答案)

Github上堪称最全的面试题库(Java岗)到底有多香