数组去重在工作中是避免不了需要用到的地方,面试过程中也有很大可能概率会遇到,市面上那么多可以实现的方法,那么该用哪一个呢,而哪些是最优的解决方案。下面来看一下👉(不强求用哪一个方法,适合自己的就是最好的)
定义一个新数组并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
性能较低,胜在稳定,但是不推荐
将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
跟上面的效率差不了多少,在现在追求代码代码量少并且要实现功能的需求下,类似这种方法并不推荐
利用对象属性不能重复的特性,如果没有该属性则存入新数组。
数组去重的方法有问题,极其不稳定,不建议用
利用数组的indexOf方法
适用性不强,不适应多类型数组,速度慢
includes方法
es6中的方法,推荐(这个方法可用场景非常多且稳定,很nice,前提是浏览器支持es6)
filter 和 includes方法组合使用
容错率高且稳定,对性能没有影响,同样浏览器要支持es6
splice 方法
麻烦,强烈不推荐(蚂蚁竞走的速度。注意点:删除元素之后,需要将数组的长度也减1)
吃饱了,再来更一下。。。
lastIndexOf 方法
嗯。。。速度慢,不常用,但是可以用
map方法
sort方法
虽然这个方法可以用,但是它并不适用,容易出问题,也是不推荐
set 方法
最最简单
够用了,散会!!
补个小结:数组去重的两个实质,元素对比及标志识别。其实也就是跟原数组与新数组对比的区别。 实现含对象的数组去重,要使用遍历类的方法(map、forEach、reduce等)。像Set、sort等通过改变数组的方式一般是不可行的