JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

JavaScript/前端
332
0
0
2022-04-09

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

一. 方法一(会改变数组顺序)

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

思路:将数组排序之后,数组中相同的元素只可能出现在相邻的位置上。

注意:这里进行比较时,一定要用不全等符号!==,因为 "1" !== 1 为true, "1" != 1 为false.

二. 不改变数组顺序的方法

1. 方法一

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

注意:这里的'112' 和 112不应该是重复的,所以都应该保留,所以在hash表中,应该把类型也拼接成key :isIn[typeof this[i] + this[i]]

2. 方法二

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

此处要处理的数组仅包含数字字符串.

var arr= ["a","a","1",1,2,2,3];

方法一:(双重for循环)

主要思路:将每一个元素和它后面的所有元素进行比较,若没有重复,则推入数组, 若有重复,则将重复项的最后一项推入数组.

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

方法二:

主要思路:遍历数组元素,若该元素在结果数组中不存在,则将其推入数组;

indexOf:查找指定元素在数组的首次出现的索引,若不存在该元素,则返回-1;

indexOf大小写敏感,写的时候千万要小心,顺便把typeof也记住吧,两者的'o'是不一样的;

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

方法三:

主要思路:先把原数组的第一个元素推入结果数组,从原数组的第二项开始,

判断该项元素在原数组中受首次出现的位置是否为当前位置,若是,则向数组中推入该元素。

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

方法四(借助对象)

主要思路:通过一个对象来标志元素是否存在于结果数组,若不存在,则将该元素推入结果数组,并将其标志为存在

遗憾的是,此方法没能区分出数字和字符,1和'1'只保留了一个。

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

方法五

主要思路:先排序,然后判断紧随其后的元素跟它是否重复,若不重复,则说明该元素是唯一的,故将其推入数组

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

方法六(借助ES6的Array.from()和Set数据结构)

主要思路:先把数组转换为Set数据结构,滤除多余的重复元素,再将其转换为数组

Set是ES6提供的一个数据结构,里面的元素不能出现重复,学过高一数学的你们应该都能理解集合的概念吧

Array.from()ES6新增的数组方法,该方法可以将一个类数组对象或可遍历对象转换成真正的数组。

JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了

总结:

数组去重的方法有很多种,但少不了两种结构:循环结构(为了处理每一个数组元素,必然少不了它)和分支结构(为了判断是否重复,也肯定要使用到它)。 如果说代码中没有出现以上两种逻辑,要么是采用了递归的思路,要么就是利用到的数据结构(比如Set数据结构)或方法已经帮我们处理了那些逻辑。