Appearance
2022/10/12
git 工作流
详见 技术分享 板块
Set 集合去重
Set 是集合数据类型,项目中不常用,但其有一个很好的特性
集合类型的元素是唯一不重复的
因此,Set 集合类型可以用于去重,例如
ts
const arr = [1,1,2,3]
const set = new Set(arr)
console.log(set) // {1,2,3}
const arr2 = [...set]
console.log(arr2) // [1,2,3]
这在某些算法题中可能会派上大用场
递归中引用类型的处理
递归是一种常见的算法模型,递归中保存每一步的数据通常用数组,数组是引用类型,改变原数组会导致所有递归线路中数组同步更新,这是我们不愿意看到的,我们希望每一个递归线路都存储着相互独立的数组。
我们知道一般的数组整体赋值为浅复制,所以采用整体赋值给临时变量存储数组数据的想法不通,仍然会同步更新所有线路数据。
但并非整体赋值行不通,展开运算符可以实现数组的深拷贝
ts
const arr = [1,1,2,3]
const arr2 = arr
console.log(arr === arr2) // true
const arr3 = [...arr]
console.log(arr === arr3) // false
我们可能还会需要一种返回 新数组 的方法,push
作为常见的数组存储数据方法只会修改源数据,而 concat
可以返回新数组,此外还有一些返回新数组的方法也是可以使用的。
js 中的 hashMap
hashMap 是用空间换取时间的一种方案,为什么这样说呢?
在数组中搜索数据是一种常见耗时算法,例如在[1,3,6,8,7]
中搜索数值 8 ,常规的需要遍历数组,直到直到这个值。当数组长度很长,搜索次数很多的时候,这个算法耗时规模是很大的。
hashMap 会开辟一段内存空间,例如新建一个长度为10的数组,该数组内部只存储着数据1或0,若 hashMap[3] = 1 ,则说明某一映射中存储有数据 3 ,因为按下标检索数组的时间消耗是极小的,不需要遍历。
这样便达到了空间换取时间的效果,详细的例子看 LeetCode.36 有效的数独 。
RegExp
正则是一种强大的匹配方案,但匹配不限于正则,比如有如下几种匹配方案:
<String | Array>
.includes(el)- String.search(el)
- String.indexOf(el, begin)
- String.replace(el/patt, aim)
- String.match(patt)
- patt.exec(str)
- patt.test(str)
值得注意的是,即使配置了 global 标志,exec 方法也无法一次返回所有匹配项,需要多次调用,每次调用从上次的匹配项向后查找。