前言
题目来自ConardLi的blog
以及平时遇到的一些编程题
写的是自己的题解,水平有限,所以仅供参考
代码会整合在github,觉得有帮助就给个star吧~
正文
四、数据结构与算法
JavaScript编码能力
1、实现一个Storage
Storage在浏览器中只有一个,所以我们可以用单例模式去实现他
2、多种方式实现数组去重、扁平化、对比优缺点
去重:
-
set
-
filter
-
reduce
数组扁平化:
-
flat
-
apply
-
...
-
reduce
3、多种方式实现深浅拷贝、对比优缺点
- 浅克隆
浅克隆就是新建了一个新的对象,将原对象的属性一个个赋值到新对象里
es6之前:
es6之后:
深克隆:
-
JSON.parse方法
JSON对象parse方法可以将JSON字符串反序列化成JS对象,stringify方法可以将JS对象序列化成JSON字符串,这两个方法结合起来就能产生一个便捷的深克隆。
JSON.parse方法的缺点:
- 无法对函数克隆 会输出
undefined
- 稀疏数组复制错误
undefined
会变成null
- 无法对
RegExp
,Date
,Symbol
等特殊对象正确克隆 - 会抛弃对象的
constructor
,所有的构造函数会指向Object
- 对象有循环引用,会报错
靠谱的深克隆方法——递归
-
遇到引用类型就递归深拷贝
4、手写函数柯里化工具函数、并理解其应用场景和优势
柯里化是高阶函数的一种,高阶函数的定义是一个接收函数作为参数传递或者将函数作为返回值输出的函数。
应用场景:
题目:
5、手写防抖和节流工具函数、并理解其内部原理和应用场景
暂时不会,待更新
6、实现一个sleep函数
暂时不会,待更新
7、实现一个Queue类
task函数:新增一个任务。包含两个参数,等待时间和回调函数。
start函数:执行任务队列。将所有任务按队列顺序执行,执行完一个任务才能执行下一个任务。
8、实现一个驼峰转换函数
9、实现LRU算法
10、实现货币格式转换函数
11、实现一个LazyMan
12、大数相加
网友评论