# 三道前端题

> 几道面试题...

发布：2025-11-30 | 分类：计算机 | 标签：面试、前端


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

## 提交按钮防止重复

简单来说，就是题目模拟了一个 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()`。

![](附件/三道前端题.md_附件/3057bad10d07110689c0ef8d1b320599.jpeg)

```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
}
```
