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

提交按钮防止重复

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

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

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 这个参数… 还在想时间怎么办,最后再回来看一下这个方法,写的就快了

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

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

判断数据类型是否为空

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

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()

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 分割,然后处理键值。忘了具体的是啥了…. 反正也挺好写的

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