JS数组去重的各个方法及适用性

717 阅读2分钟

数组去重在工作中是避免不了需要用到的地方,面试过程中也有很大可能概率会遇到,市面上那么多可以实现的方法,那么该用哪一个呢,而哪些是最优的解决方案。下面来看一下👉(不强求用哪一个方法,适合自己的就是最好的)

定义一个新数组并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。

性能较低,胜在稳定,但是不推荐 image.png

image.png

将原数组排序,在与相邻的进行比较,如果不同则存入新数组。

跟上面的效率差不了多少,在现在追求代码代码量少并且要实现功能的需求下,类似这种方法并不推荐 image.png

image.png

利用对象属性不能重复的特性,如果没有该属性则存入新数组。

数组去重的方法有问题,极其不稳定,不建议用 image.png

image.png

利用数组的indexOf方法

适用性不强,不适应多类型数组,速度慢 image.png

image.png

includes方法

es6中的方法,推荐(这个方法可用场景非常多且稳定,很nice,前提是浏览器支持es6) image.png

image.png

filter 和 includes方法组合使用

容错率高且稳定,对性能没有影响,同样浏览器要支持es6

image.png

image.png

splice 方法

麻烦,强烈不推荐(蚂蚁竞走的速度。注意点:删除元素之后,需要将数组的长度也减1)

image.png

image.png

吃饱了,再来更一下。。。

lastIndexOf 方法

嗯。。。速度慢,不常用,但是可以用 image.png

image.png

map方法

image.png

image.png

sort方法

虽然这个方法可以用,但是它并不适用,容易出问题,也是不推荐

image.png

image.png

set 方法

最最简单

image.png

image.png

够用了,散会!!

补个小结:数组去重的两个实质,元素对比及标志识别。其实也就是跟原数组与新数组对比的区别。 实现含对象的数组去重,要使用遍历类的方法(map、forEach、reduce等)。像Set、sort等通过改变数组的方式一般是不可行的