使用JavaScript进行数组去重的方法有很多,这里就列举一些较为常用的方法,以作参考。
1、双for循环
不推荐使用
依次遍历数组中的每一项,拿当前项和其”后面”的每一项进行比较,如果后面中有和他相同的,则说明这项是重复的,我们把后面中重复的这一项删除掉即可
多次循环,性能不好
1 | let array = [1,1,4,5,1,4,1,9,1,9,8,1,0] |
2、对象的键值对方式
利用对象中属性名不能重复的特点,先建立-个空对象,然后依次循环数组中的每一项,把此项作为obj对象的属性名和属性值,在添加的时候如果这个属性名对应的值已经存在,说明此项重复,删除掉此项
只有一个循环,性能较好
如果数组中存在数字10
和字符串'10'
,则也会认为是重复的(对象中的属性名是数字和字符串没什么区别)
如果数组中出现对象则存在问题(因为对象的属性名不能是对象,遇到会转换成字符串)
数组中的值如果是undefined
可能也会出现问题
1 | let array = [1,1,4,5,1,4,1,9,1,9,8,1,0] |
3、indexOf检测的方式
创建一个新数组,遍历原数组,如果新数组中没有那一项,就push进去
1
2
3
4
5
6
7
8 let array = [1, 1, 4, 5, 1, 4, 1, 9, 1, 9, 8, 1, 0]
let newarr = []
for(i in array){
let item = array[i]
if(newarr.indexOf(item) == -1)
newarr.push(item)
}
console.log(newarr) //[1, 4, 5, 9, 8, 0]
4、Set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
1
2 let array = [1, 1, 4, 5, 1, 4, 1, 9, 1, 9, 8, 1, 0]
console.log([...new Set(array)]) //[1, 4, 5, 9, 8, 0]
也可以通过Set实现两个数组的交并差集
1 | let a = new Set([1, 2, 3]); |