zoukankan      html  css  js  c++  java
  • 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)(大小写不敏感)

    1 /**
    2  * isPalindrome - 返回true或false判断给定字符串是否是一个回文(palindrome)(大小写不敏感)
    3  * @param str
    4  */
    5 
    6 function isPalindrome(str) {
    7   return str.toUpperCase() === str.split('').reverse().join('').toUpperCase() ? true : false;
    8 }

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

     1 /**
     2  * 用true或false表示给定的字符串的花括号是否平衡(一一对应)
     3  * @param str
     4  */
     5 function isBalanced(str) {
     6   var num1 = 0, num2 = 0, arr = str.split('');
     7   for (var i = 0; i < arr.length; i++) {
     8     if (arr[i] === '{') num1++;
     9     if (arr[i] === '}') num2++;
    10   }
    11   return num1 === num2 ? true : false
    12 }

    二、编码(中级)

    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的函数体内使用数组的函数,然后逐一的解决。

  • 相关阅读:
    虚拟机网络模型详解,看这篇就够了(图文并茂)
    快速理解 VirtualBox 的四种网络连接方式
    Linux下桥接模式详解一
    CentOS7 下VNC Server远程桌面配置详解
    BAN如何下载?
    SNS交换机(OEM博科FC交换机)怎样设置密码策略
    SNS交换机(OEM博科FC交换机)的端口状态及排查流程说明
    SNS2124(OEM博科FC交换机)忘记密码,密码初始化
    博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)
    手淫让我付出了沉重的代价
  • 原文地址:https://www.cnblogs.com/wanghao123/p/10304870.html
Copyright © 2011-2022 走看看