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--
使用一层循环就可以了
循环次数就比较少
A True Master Is An Eternal Student(真正的大师总是怀着一颗学徒的心) ------(Master Yi)