JavaScript中的数据的去重


一、indexOf()

原理:将原始数组中的数据,写入到新的数组中,如果新数组中,没有这个数据,我们再进行写入操作,indexOf() 结果是 -1

 1     var arr = [1,2,2,3,5,3,1,5,4,3,4,5,6];
 2     //定义一个新数组
 3     var arr2 = setNewArr(arr);
 4     console.log(arr2);
 5     //执行去除重复数据的数组
 6     function setNewArr(arr){
 7         //定义一个新数组
 8         var newArr = [];
 9         //执行循环
10         arr.forEach(function(v){
11             //执行判断字符出现位置
12             if(newArr.indexOf(v) == -1){
13                 //如果newArr中没有该数据,就写入数据到newArr中
14                 newArr.push(v);
15             }
16         })
17         return newArr;
18     }

注:forEach不能用于对象

二、双重for循环

 1 var arr123 = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
 2     //封装一个循环判断函数
 3     function setNewArr2(arr){
 4         //外层循环,从第一个开始,循环至最后
 5         for(var i = 0; i <= arr.length-1;i++){
 6             //内层循环,从循环次数的第二个开始,循环至最后
 7             for(var j = i+1 ; j <= arr.length-1 ; j++){
 8                 //判断第一个和第二个是不是全等,如果是,则将第二个删除,同时j向前移动一位
 9                 if(arr[i] === arr[j]){
10                     arr.splice(j,1);
11                     j--;
12                 }
13             }
14         }
15         return arr;
16     }
17     //引用变量执行函数
18     var newArr = setNewArr2(arr123);
19     console.log(newArr);

注:

循环操作数组,只要执行了删除数组单元的操作

一定要将循环变量数值执行 -- (自身减减)操作

三、先排序,后去重
概念:先将数组中的数值,排列顺序,后比较删重复值

 1             var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
 2         //定义一个新数组
 3         var newArr =setNewArr3(arr);
 4         console.log(newArr);
 5         //封装一个函数
 6         function setNewArr3(arr){
 7             //先对数组进行排序操作,相同数据,相邻
 8             var newArr = arr.sort(function(a,b){return a-b});
 9             console.log(newArr);
10             //相邻数组进行比对
11             for(var i = 0;i <= arr.length - 1;i++){
12                 //如果相邻数组相同,则删除后面的数据,同时与下一个补位数据进行对比
13                 if(newArr[i] === newArr[i+1]){
14                     newArr.splice(i+1, 1)
15                     i--;
16                 }
17             }
18             return newArr;
19         }

注:

先将数组中的数值,按照大小顺序,排列
排序之后,相同的数值,一定是相邻的
此时,只要相邻的两个数值比较,如果相同,删除后一个数据,再执行 i--
使用一层循环就可以了
循环次数就比较少

posted @ 2020-03-23 23:00  不懂老爱瞎逼逼  阅读(266)  评论(0编辑  收藏  举报