数组去重

第一种:用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

原文地址:https://www.cnblogs.com/oaoa/p/14679316.html