手写实现
合并区间
var merge = function(intervals) {
intervals.sort((p, q) => p[0] - q[0]); // 按照左端点从小到大排序
const ans = [];
for (const p of intervals) {
const m = ans.length;
if (m && p[0] <= ans[m - 1][1]) { // 可以合并
ans[m - 1][1] = Math.max(ans[m - 1][1], p[1]); // 更新右端点最大值
} else { // 不相交,无法合并
ans.push(p); // 新的合并区间
}
}
return ans;
};Promise.finally
Promise.prototype.finally = function (callback) {
return this.then((data) => {
return Promise.resolve(callback()).then(() => data); // data 上一个promise的成功态
}, err => {
return Promise.resolve(callback()).then(() => {
throw err; // 把之前的失败的err,抛出去
});
})
}接雨水
无重复最大子串
三数之和
翻转列表(part)
防抖
事件触发 n 秒后再执行回调,如果在 n 秒内又被触发,则重新计时
常见场景:
搜索框输入
手机号、邮箱验证的检测
窗口 Resize,只有大小调整好后,再重新计算渲染
节流
防抖可能会产生“饥饿“问题,节流类似于给函数赋予一个 CD,一次函数执行后的一定时间内不能再被触发
常见场景
高频次提交,表单重复提交
滚动加载
浅拷贝 & 深拷贝
浅拷贝
浅拷贝只复制第一层,使用 Object.assign() 可以实现
深拷贝
JSON.stringify(), JSON.parse()
递归实现
获取页面 URL

交集 并集 差集
千分位数字
判断对象是否为空
传入 [1,[[2],3,4],5] ,返回 [1,2,3,4,5]
16 进制转 rgb
实现 sleep
生成 N 个范围在 (min, max) 中的数
拆分查询参数
去掉字符串前后的空格
三数之和,双指针
环形链表
二叉树公共祖先
层序构建二叉树
快排
归并排序
ES5 继承
异步加法
手写 new
手写实现 bind
Last updated