数组去重
第一种:用indexOf方法
这种方法最简单最直观,也最容易理解,代码如下:
1 var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
2 var newArr = []
3 for (var i = 0; i < arr.length; i++) {
4 if (newArr.indexOf(arr[i]) === -1) {
5 newArr.push(arr[i])
6 }
7 }
8 console.log(newArr) // 结果:[2, 8, 5, 0, 6, 7]
这种方法很好理解,利用了indexOf()
方法(indexOf()
方法如果查询到则返回查询到的第一个结果在数组中的索引,如果查询不到则返回-1)。先创建一个新的空数组用来存储新的去重的数组,然后遍历arr
数组,在遍历过程中,分别判断newArr
数组里面是不是有遍历到的arr
中的元素,如果没有,直接添加进newArr
中,如果已经有了(重复),那么不操作,那么从头到尾遍历一遍,正好达到了去重的目的。
第二种:双重for循环用splice方法删除
两次for循环删除所有后序重复的元素
例如: 1 1 1 3 2 1 2 4
1 function noRepeat1(arr){
2 // 第一层for用来控制循环的次数
3 for(var i=0; i<arr.length; i++){
4 //第二层for 用于控制与第一层比较的元素
5 for(var j=i+1; j<arr.length; j++){
6 //如果相等
7 if(arr[i] == arr[j]){
8 //删除后面的 即第 j个位置上的元素 删除个数 1 个
9 arr.splice(j,1);
10 // j--很关键的一步 如果删除 程序就会出错
11 //j--的原因是 每次使用splice删除元素时 返回的是一个新的数组
12 // 这意味这数组下次遍历是 比较市跳过了一个元素
13 /*
14 例如: 第一次删除后 返回的是 1 1 3 2 1 2 4
15 * 但是第二次遍历是 j的值为2 arr[2] = 3
16 * 相当于跳过一个元素 因此要 j--
17 * */
18 j--;
19
20 }
21
22 }
23 }
24
25 return arr;
26 }
第三种:排序后相邻去除,用sort方法
1 var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
2 arr.sort()
3 var newArr = [arr[0]]
4 for (var i = 1; i < arr.length; i++) {
5 if (arr[i] !== newArr[newArr.length - 1]) {
6 newArr.push(arr[i])
7 }
8 }
9 console.log(newArr) // 结果:[0, 2, 5, 6, 7, 8]
这种方法的思路是:先用sort()
方法把arr
排序,那么排完序后,相同的一定是挨在一起的,把它去掉就好了,首先给新数组初始化一个arr[0]
,因为我们要用它和arr
数组进行比较,所以,for
循环里面i
也是从1开始了,我们让遍历到的arr
中的值和新数组最后一位进行比较,如果相等,则pass掉,不相等的,push进来,因为数组重新排序了,重复的都挨在一起,那么这就保证了重复的这几个值只有第一个会被push进来,其余的都和新数组的被push进来的这个元素相等,会被pass掉,也达到了去重的效果。
———————————————————————————————
参考文章:
https://www.cnblogs.com/silentmuh/p/13066408.html
https://blog.csdn.net/qq_42489540/article/details/81671312