前言:
不一定是完整的题目内容,但意思差不多是一个意思
1.实现一个url解析成对象的函数:
javascript
function ParseParams(url: string): Record<string, any> {
const paramsstr = url.split("?")[1];
const paramsArr = paramsstr.split("&");
let paramsobj: Record<string, any> = {};
paramsArr.forEach((item) => {
if (/=/.test(item)) {
//处理有值的参数
let [key, val]: [string, any] = item.split("=") as [string, any]; //分割key和value;
val = decodeURIComponent(val); //中文解码;
val = /^\d+$/.test(val) ? parseInt(val) : val; //是否需要转化成数字
if (paramsobj.hasOwnProperty(key)) {
//看看是否有这个,如果已经有了,则创建一个数组,添加进去
paramsobj[key] = [].concat(paramsobj[key], val);
} else {
paramsobj[key] = val;
}
} else {
paramsobj[item] = true;
}
});
return paramsobj;
}
这个题差不多是这个意思,就是url后面的param,转成对象的形式,值得注意的是需要考虑一下特殊情况比如:
- null和undenfind
- 参数中"=","&"等特殊字符的情况
- key多次出现,转成数组的情况
但是上面的代码测试没过全,还需要大神的指点
1.实现一个PromiseLimit函数:
题目需要满足以下要求
1.实现 PromiseLimit函数;
-
PromiseLimit 函数接受一个整数 limit, 表示最大并发数;
-
PromiseLimit可以通过 enqueue 方法添加任务, 该方法接
受一个返回Promise 的函数, 4.将其加入到任务队列中并返
回一个新的 Promise 对象, 用于获取任务的结果;
4.当任务队列中有空闲位置时, 该任务将被立即执行; 否则,该任务将被添加到等待队列中, 等待其他任务完成后再执行;
5.当任务执行完成时, 无论成功或失败, 都应该将其从任务队列中移除并执行下一个任务:
enqueue 方法返回的 Pronise对象应该能够获取任务的执行结果;
6.支持 Promise. all 等待所有任务完成,并获取它们的结果;
7.可以处理任务执行出错的情况。
GPT4真强大