1.输出以下代码执行结果
function wait() {
return new Promise(resolve =>
setTimeout(resolve, 10 * 1000)
)
}
async function main() {
console.time();
const x = wait();
const y = wait();
const z = wait();
await x;
await y;
await z;
console.timeEnd();
}
main();输出结果并解释原因
2. 解析 URL Params 为对象
尽可能的全面正确的解析一个任意 url 的所有参数为 Object,注意边界条件的处理。
let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';
parseParam(url)
/* 结果
{ user: 'anonymous',
id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
city: '北京', // 中文需解码
enabled: true, // 未指定值得 key 约定为 true
}
*/
3. 实现一个简单的模板引擎
// 例子:
let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let data = {
name: '姓名',
age: 18
}
render(template, data); // 我是姓名,年龄18,性别undefined4. 字符串查找
请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)。
// 例子:
a='34';b='1234567'; // 返回 2
a='35';b='1234567'; // 返回 -1
a='355';b='12354355'; // 返回 5
isContain(a,b);5. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。
示例 给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
答案:
1、略大于 10000
2、
let parseParam = function (url) {
let obj = new Object();
let data = url.slice(url.indexOf('?'), url.length);
let params = data.substr(1).split('&');
for (let i = 0 ; i < params.length ; i ++) {
let param = params[i].split('=');
if (param[1]) {
param[1] = decodeURIComponent(param[1])
}
if (obj[param[0]]) {
obj[param[0]] = [obj[param[0]]]
obj[param[0]].push(param[1])
} else {
obj[param[0]] = param[1]
}
if (!param[1]) {
obj[param[0]] = true
}
}
console.log(obj)
}3、
let render = function (template, data) {
let key, value, reg;
for (key in data) {
reg = new RegExp('{{' + key + '}}', 'g');
value = data[key];
template = template.replace(reg, value);
}
template = template.replace(/{{\w+}}/g, 'undefined')
return template;
}4、
let isContain = function (a, b) {
if (a.length > b.length) return -1
for (let i = 0 ; i < b.length ; i++) {
if (b[i] === a[0]) {
let k = 0;
let flag = true;
while (k < a.length) {
if (b[i + k] !== a[k]) {
flag = false;
}
k++
}
if (flag) {
return i
}
}
}
return -1
}5、
let twoSum = function (nums, target) {
let len = nums.length;
while (len > 1) {
let last = nums.pop();
if (nums.indexOf(target - last) > -1) {
return [nums.indexOf(target - last), nums.length]
}
len--
}
}