码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端常考手写面试题汇总


    实现一个函数判断数据类型

    function getType(obj) {
       
       if (obj === null) return String(obj);
       return typeof obj === 'object' 
       ? Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '').toLowerCase()
       : typeof obj;
    }
    
    // 调用
    getType(null); // -> null
    getType(undefined); // -> undefined
    getType({
       }); // -> object
    getType([]); // -> array
    getType(123); // -> number
    getType(true); // -> boolean
    getType('123'); // -> string
    getType(/123/); // -> regexp
    getType(new Date()); // -> date
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    字符串查找

    请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)。

    a='34';b='1234567'; // 返回 2
    a='35';b='1234567'; // 返回 -1
    a='355';b='12354355'; // 返回 5
    isContain(a,b);
    
    • 1
    • 2
    • 3
    • 4
    function isContain(a, b) {
       
      for (let i in b) {
       
        if (a[0] === b[i]) {
       
          let tmp = true;
          for (let j in a) {
       
            if (a[j] !== b[~~i + ~~j]) {
       
              tmp = false;
            }
          }
          if (tmp) {
       
            return i;
          }
        }
      }
      return -1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    实现千位分隔符

    // 保留三位小数
    parseToMoney(1234.56); // return '1,234.56'
    parseToMoney(123456789); // return '123,456,789'
    parseToMoney(1087654.321); // return '1,087,654.321'
    
    • 1
    • 2
    • 3
    • 4
    function parseToMoney(num) {
       
      num = parseFloat(num.toFixed(3));
      let [integer, decimal] = String.prototype.split.call(num, '.');
      integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&,');
      return integer + '.' + (decimal ? decimal : '');
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    实现 (5).add(3).minus(2) 功能

    例: 5 + 3 - 2,结果为 6

    Number.prototype.add = function(n) {
       
      return this.valueOf() + n;
    };
    Number.prototype.minus = function(n) {
       
      return this.valueOf() - n;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    实现add(1)(2) =3

    // 题意的答案
    const add = (num1) => (num2)=> num2 + num1;
    
    // 整了一个加强版 可以无限链式调用 add(1)(2)(3)(4)(5)....
    function add(x) {
       
      // 存储和
      let sum = x;
    
      // 函数调用会相加,然后每次都会返回这个函数本身
      let tmp = function (y) {
       
        sum = sum + y;
        return tmp;
      };
    
      // 对象的toString必须是一个方法 在方法中返回了这个和
      tmp.toString = () => sum
      return tmp;
    }
    
    alert(add(1)(2)(3)(4)(5))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    无限链式调用实现的关键在于 对象的 toString 方法 : 每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。

    也就是我在调用很多次后,他们的结果会存在add函数中的sum变量上,当我alert的时候 add会自动调用 toString方法 打印出 sum, 也就是最终的结果

    验证是否是邮箱

    function isEmail(email) {
       
        var regx = /^([a-zA-Z0-9_\-])+@([a-zA-Z0-9_\-])+(\.[a-zA-Z0-9_\-])+$/;
        return regx.test(email);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建10个标签,点击的时候弹出来对应的序号

    var a
    for(let i=0;i<10;i++){
       
     a=document.createElement('a')
     a.innerHTML=i+'
    '
    a.addEventListener('click',function(e){ console.log(this) //this为当前点击的 e.preventDefault() //如果调用这个方法,默认事件行为将不再触发。 //例如,在执行这个方法后,如果点击一个链接(a标签),浏览器不会跳转到新的 URL 去了。我们可以用 event.isDefaultPrevented() 来确定这个方法是否(在那个事件对象上)被调用过了。 alert(i) }) const d=document.querySelector('div') d.appendChild(a) //append向一个已存在的元素追加该元素。 }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    查找数组公共前缀(美团)

    题目描述

    编写一个函数来查找字符串数组中的最长公共前缀。
    如果不存在公共前缀,返回空字符串 ""。
    
    示例 1:
    
    输入:strs = ["flower","flow","flight"]
    输出:"fl"
    
    示例 2:
    
    输入:strs = ["dog","racecar","car"]
    输出:""
    解释:输入不存在公共前缀。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    答案

    const longestCommonPrefix = function (strs) {
       
      const str = strs[0];
      let index = 0;
      while (index < str.length) {
       
        const strCur = str.slice(0, index + 1);
        for (let i = 0; i < strs.length; i++) {
       
          if (!strs[i] || !strs[i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    uniapp开发断小程序-如何判断小程序是在手机端还是pc端打开
    C语言:static,volatile,const,extern,register,auto, 栈stack结构
    Talk预告 | 中国科学技术大学和微软亚洲研究院联合培养博士生冷燚冲:语音识别的快速纠错模型FastCorrect
    [信息系统项目管理师-2023备考]信息化与信息系统(一)
    测试服务器的udping值
    分布式场景仿真中的空间坐标转换研究
    泛微开发修炼之旅--37通过js实现监听下拉框,并触发后端接口,改变其他控件内容的实现方法与源码(含pc端和移动端实现)
    线扫相机DALSA软件开发套件有哪些
    React技术栈 --》组件对比和评论列表案例 ## Day4
    python-(4-3)数据类型的应用(元组、集合)
  • 原文地址:https://blog.csdn.net/helloworld1024fd/article/details/127608866
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号