方法一
定义一个新数组,用于存储不重复的数组元素,利用数组的indexOf方法,循环遍历原数组判断新数组中是否有原数组元素,如果没有则存储到新数组中,从而实现数组的去重
``
var newArr = [] //定义一个新数组newArr,用于存储不重复的数组元素
var arr = [10, 22, 33, 43, 10, 10, 51, 22]
// 2.循环遍历原数组
for (var i = 0; i < arr.length; i++) {
//3. 判断新数组中是否有原数组元素,如果没有存储到新数组中
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i])
}
}
console.log(newArr) //[10, 22, 33, 43, 51]
方法二
利用数组的splice方法,从数组下标0开始跟后面一个数比较是否相等,如果相等就截取掉后面一个数组元素,并让下标减1回到正常序号
for (var i = 0; i < arr.length; i++) { //外层循环从下标0开始
for (var j = i + 1; j < arr.length; j++) { //里层循环从 i + 1 开始
if (arr[i] == arr[j]) { //判断前一个数与后一个数是否相等,相等说明需要去重
arr.splice(j, 1) //截取掉重复的那个
j-- //重点是要将j的下标自减1,因为删除了一个元素,产生了数组塌陷,后面的元素跑到前面来,下标却因为循环的原因会漏掉一个元素
}
}
}
console.log(arr) // [10, 22, 33, 43, 51]
方法三
利用ES6新增的Set对象
Set像数组Array一样用来存储数据,是一个无序数据的集合(数组是有序的)。我们可以在new的时候直接向内部添加数据,最大的特点是,数据不能重复。添加重复的相当于是覆盖掉前面相同数据,不像数组一样可以有重复的数据
//利用Set集合中的的元素是唯一的,所以我们可以利用它来去重
let arr = [10, 22, 33, 43, 10, 10, 51, 22]
let setObj = new Set(arr)
console.log(setObj);
//可以使用伪数组转真数组
//let arr1 = Array.from(setObj)
// console.log(arr1);
//或者使用解构对象的方法
let arr2 = [...setObj]
console.log(arr2);// [10, 22, 33, 43, 51]