惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
P
Proofpoint News Feed
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
美团技术团队
D
Docker
博客园 - Franky
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

Lanke

Google 账号地区是日本,ChatGPT 订阅为什么还是美元? 在 Flutter 项目里折腾苹果的液态玻璃效果 从“宅斗庶女”看极端女权 一期一会 关于梦 用 Vercel AI Gateway 给博客做一个 AI 摘要服务 Claude 搜索网页报错:Unable to verify if domain is safe to fetch 的解决方法 Flutter输入面板布局优化:键盘、表情面板与@联想的丝滑切换 再谈语言和思维 还有人记得 在2026年拥有自己的博客 为 Astro 博客添加 llms.txt 使用 LLM Wiki 作为 Hermes Agent 的记忆系统 使用Obsidian 作为 Hermes Agent 的记忆数据库 流畅的下滑关闭页面 遇到的一起生产事故 好看的鼠标样式 拖了很久的更新,还是来了 Linux · 常用日志查询命令 面试 · Java面试二 面试 · Java面试一 如何实现验证码及校验 在电脑上共存MySQL 「随便来点」失语症 一些碰到的面试问题 关于博客主题的自问自答 重装电脑后恢复MySQL数据 如何畅玩旮旯game之软件篇--串流 欢迎来到实力至上主义教室 谈“诚哥”之死
三道前端题
Lanke · 2025-11-30 · via Lanke

最近投了个简历,然后给我回了个链接,要求做三道编程题,简单记录一下

提交按钮防止重复

简单来说,就是题目模拟了一个 submit 提交接口,实际上循环嵌套了几下

大致应该是这样?submit 方法忘了,反正就是一个简单的 log 输出,要求我们完善handleSubmit 避免 1 s 内重复提交

js

function handleSubmit(func,timeout){

}

const submit = handleSubmit(submit方法,1000)

submit(1);
submit(2);

setTimeout(() => {
  submit(3);
  setTimeout(() => {
    submit(4);
        ....
        setTimeout(() => submit(6), 800);
    }
}

还是第一次做前端编程题,导致这个题我一开始懵完了,写了二十分钟,感觉实际上简单,判断一下时间,如果在冷却就不执行。但是我之前直接用的封装好的 <Button> 组件,想了半天,反正是通过时间进行判断,只需要接受参数就好了,不过当时忘了 timeout 这个参数... 还在想时间怎么办,最后再回来看一下这个方法,写的就快了

js

function handleSubmit(func, timeout) {
  let isCooling = false;
   return function (…args) {
     if (isCooling) return;
     func.apply(this, args);
     isCooling = true;
     setTimeout(() => {
       isCooling = false;
     }, timeout);
   };
 }

每次判断下是否在冷却,如果不再冷却,就执行

判断数据类型是否为空

题目:判断数据类型是否为空,其中空格字符串以及全空格字符串同样视为空

js

const isEmpty = (value) => {}

console.log(isEmpty(undefined))
console.log(isEmpty(null))
console.log(isEmpty(0))
console.log(isEmpty(' adc'))
console.log(isEmpty('   '))
console.log(isEmpty({}))
console.log(isEmpty([]))

这个就比较简单了,只需要判断一下,稍微难的可能就是处理空格字符串,但是和 java 的方法还是一样的,都是 trim()

js

const isEmpty = (value) => {

  if (Array.isArray(value)) {
   if(value.length === 0){
      	return true;
      	}
  }

  if (typeof value === 'string') {
    if(value.trim() === ''){
        return true;
        }
  }
  if (typeof value === 'number') {
    if(value === 0 || isNaN(value)) {
        return true;
        }
  }

  if (typeof value === 'object') {
    if(value === null || Object.keys(value).length === 0){
        return true;
        }
  }
  if(value === null || value ===undefined){
    return true;
    }
  return false;
};

参数值提取

这个倒是不算难... 毕竟我的项目里也是遇到了,无非是 split 分割,然后处理键值。忘了具体的是啥了.... 反正也挺好写的

js

const getURLParam = (url, param) => {
  const queryStr = url.split('?')[1]
  if (!queryStr) return null

  const paramArr = queryStr.split('&')
  const result = []

  paramArr.forEach((item) => {
    const [key, value] = item.split('=')
    const decodeKey = decodeURIComponent(key)
    const decodeValue = value ? decodeURIComponent(value) : ''

    if (decodeKey === param) {
      try {
        result.push(JSON.parse(decodeValue))
      } catch (e) {
        result.push(decodeValue)
      }
    }
  })

  if (result.length === 0) return null
  return result.length === 1 ? result[0] : result
}

文章标题:三道前端题

文章作者:Lanke

文章链接:https://blog.blueke.top/posts/722[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。