JavaScript面试题库
Posted wanghao123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript面试题库相关的知识,希望对你有一定的参考价值。
一、编码(初级)
1.isPrime
- 返回true
或false
, 表示输入的数是否为质数
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
- 返回true
或false
,表示给定的数组是否被排序过
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
- 用true
或false
表示给定的字符串的花括号是否平衡(一一对应)
二、编码(中级)
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
- 判断给定的数字是否出现在给定的已排列好的数组中,返回true
或false
。是否能设计出时间复杂度为O(log(N))的算法?
7.assignDeep
- 仿照 Object.assign, 但是要深度合并对象。为了简单起见,可以假设对象只包含数字或是什么别的(而不是数组、函数等)。
8.reduceAsync
- 仿照reduce 你在“简单”部分中完成了,但每个条目都必须在进行下一步之前被解决。
9.用reduceAsync
来实现seq
。seq
使用一个可返回 promise
的函数体内使用数组的函数,然后逐一的解决。
以上是关于JavaScript面试题库的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript算法题实现-146-LRU缓存机制——腾讯面试题库