Skip to content

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 方法也无法一次返回所有匹配项,需要多次调用,每次调用从上次的匹配项向后查找。

Released under the MIT License.