传统的去重思路大致如下。
声明一个新的数组,在把旧的数组依次往新的数组里面push,如果遇到新数组已有的对象,就不push.
var arr =[1,3,3,3,5,6,6,7,8,1,5,9,5]; var newArr = []; //先声明一个对比的方法 function findInArr(arr,n){ for(var i=0;i<arr.length;i++){ if(arr[i]==n)return true;//找到相似的返回true } return false;//遍历完没有找到相似的返回 false } for(var i=0;i<arr.length;i++){ if(!findInArr(newArr,arr[i])){ newArr.push(arr[i]) } } console.log(newArr)//返回去重后的数组
另一种解决的思路是数组集合里面每次比对两个邻近对象,后一个和前一个相同,就slice掉后一个。
var arr = [23,3,43,4,4,5,5,6,6,6,6,23]; // 23,3,4,5,6 for(var i = 0 ;i<arr.length;i++){ for(var j = i+1;j<arr.length;j++){ if(arr[i]==arr[j]){ arr.splice(j,1); j--;//去重后后退一位再继续遍历 } } }console.log(arr);//返回去重后的数组
上述两种方法都是进行了两次loop,在处理较大的数据时运行效率就比较低下了。
下一种方法效率应该会更高一些,只进行了一次loop;
var arr = [23,3,43,4,4,5,5,6,6,6,6,23]; //思路如下,先对数组进行排序,升序或者降序都可以 arr.sort(function(n1,n2){ return n1-n2; }); for(var i = 0 ;i<arr.length;i++){ if(arr[i]==arr[i+1]){ arr.slice(i+1,1); i--; } } console.log(arr);
数组去重应该还有蛮多的方法,以前用过循环对象字面量赋值的方法。下次有时间,在补上了。
时间: 2024-10-11 17:42:25