算法
单例
链表
- 火车形式,头部不储存数据 - 链表节点有data和next,data储存数据,next指向下一个节点的地址
模拟实现localStorage
二分查找
排序
- sort()实现
- 冒泡
- 双循环 - 每一轮从第0个数开始,比较当前值和后一位的值大小,大于则交换位置
- 快速
- 先取中间值 - 依次取值与中间值比较,小于放左边,大于放右边
- 插入
- 先取一位数放在新数组里 - 新取一位数依次与新数组的值进行比较,如果比新数组比较值大,则放到新数组比较值的前面
数据结构
- 斐波那契数列,前一项加后一项的和等于第三项的值 - 循环算出数组最后两位的和,并返回,直到最后一层 - 递归返回函数以当前项和下一项的值作为参数
DFS,BFS,Trie
数组去重
- Set,[...new Set(arr)] - for循环+indexOf,拿当前的值,如果新数组里不含当前值,则放到新数组 - 双循环,用splice删除相同的值 - 先排序,对相邻项进行正则分组匹配,处理相同数据 - filter+indexOf,原数组中的第一个索引等于当前索引,则返回当前元素
数组扁平化
- es6中,arr.flat(级数),Infinity表示无限级 - 无递归数组扁平化,使用堆栈 stack - 使用 reduce 与 concat - 递归判断是否含数组,如果含有数组,则使用concat解一层
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
拖拽
- 给需要拖拽的节点绑定mousedown,mousemove,mouseup事件 - mousedown事件触发够开始拖拽 - mousemove时需要通过event.clientY和event.clientY来确定拖拽位置,并实时更新位置 - mouseup拖拽结束 - 需注意浏览器边界的情况