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

  • 相关阅读:
    .NET6之MiniAPI(四):配置
    .NET6之MiniAPI(五):选项
    Flex 布局教程 编程学习网站 学习路线 自己的学习自己的人生自己的每一天
    定时器setInterval
    教前端的厉害的网站
    js学习笔记 晓周报告 数组 记笔记让自己看的课堂笔记
    每日十问
    vue面包屑 知识 绑定数据 有人教 愿意学 每天进步一点点 学习路线html css js vue
    转 思维与智慧 写作 明朝那些事儿 阅读是人类的避难所读书治愚明理辩证发展
    JS基本概念 笔试题 DOM知识
  • 原文地址:https://www.cnblogs.com/wanghao123/p/10304870.html
Copyright © 2020-2023  润新知