搬砖时的 JS 代码片段整理
将 bytes 格式化
1 | let total = this.fileSizeFormat(spaceSize, 2, true, false) |
获取文件扩展名
1 | const extname = filename => { |
冒泡排序
1 | function bubbleSort(arr) { |
快速排序算法
快速排序是处理大数据急最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据一次分解为包含较小元素和较大元素的不同子序列。
1 | function quickSort(array) { |
JS 深度克隆
1 | function deepClone(obj) { |
Javascript 的节流和防抖
函数节流和函数防抖,两者都是优化高频率执行 JS 代码的一种手段。
函数节流
防抖动和节流本质是不一样的。放
是指一定时间内 js 方法只跑一次。
函数节流应用的实际场景,多数在监听页面元素滚动时间的时候会用到。因为滚动事件,是一个高频触发的事件。以下是监听页面元素滚动的示例代码:
1 | //函数节流 |
函数防抖
函数防抖的应有场景,最常见的就是用户注册的时候的手机号码验证和邮箱验证了。只有等用户输入完毕后,前端才需要检查格式是否正确,如果不正确,在弹出提示语。以下还是以页面元素滚动监听的例子,来解析:
1 | //函数防抖 |
函数防抖的要点,也是需要一个 setTimeout 来辅助实现。延迟执行需要跑的代码
但是这种简单版的防抖也是缺陷的,这个防抖只能在最后调用。一般的防抖会有 imm 选项,表示是否立即调用。这两者的区别在于:
- 在搜索引擎搜索问题的时候,希望达到用户数万最后一个字才调用查询整个接口,这个时候适用
延迟执行
的防抖函数,它总是在一连串(间隔小于 wait 的)函数出发之后才调用。 - 例如在用户点击按钮时,是立即调用接口,并且下一次调用时间间隔大于 wait 才会触发。
带有立即执行选项的防抖函数
1 | function now() { |
FileReader 对象
之前做图片上传预览都是把图片上传到服务器获得线上地址,如今才发现有另一种方法:使用FildeReader
(但兼容性不是很好,ie10)
FileReader
允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。主要用来把文件读入内存,并且读取文件中的数据。通过构造函数创建一个 FileReader 对象。
其中 file 对象可以是来自用户在一个<input>
元素上悬着文件后返回的 filelist 对象,也可以来自拖放操作生成的DataTransfer
对象,还可以是来自一个HTMLCanvasElement
上执行mozGetAsFile()
方法后返回结果。
FileReader.readyState
表示 FileReader 状态的数字。取值如下:
- EMPTY: 0 还没有加载任何数据。
- LOADING: 1 数据正在加载。
- DONE:2 已经完成全部的读取请求。
FileReader.result
表示文件内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作。
FileReader.readAsDataURL()
表示开始读取指定的 Blob 中的内容。一旦完成,result 属性中将包含一个 data:URL 格式的字符串以表示所读取文件的内容。
- abort:中断读取操作。
- readAsArrayBuffer:读取文件内容到 ArrayBuffer 对象中。
- readAsBinaryString:将文件读取为二进制数据。
- readAsDataURL:将文件读取为 data: URL 格式的字符串。
- readAsText:将文件读取为文本。
上传图片预览
1 | <input type="file" id="files" accept="image/jpeg,image/jpg,image/png" /> |
图片上传 小图片转 base64
1 | let reader = new FileReader(); |
Base64 编码
在 HTML5 中新增了 atob 和 btoa 方法来支持 Base64 编码。它们的命名也很简单,b to a 和 a to b,即代表着编码和解码。
1 | var a = "https://lin-xin.github.io"; |
查找数组对象里面是否含有某对象
查找 selectedList 里面是否存在 listAppEquipment 数组里面的对象
1 | let selectedListString = JSON.stringify(that.selectedList); |