一、返回 去重后数组
1、请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
Array.protoType.delRepet=delRepet();
function delRepet(){
var array = [2,3,4,6,2,4,8,4,9];
var obj={};
var arr=[];
for(var i=0,len=array.length;i<len;i++){
obj[array[i]] = array[i];
}
for(var o in obj){
arr.push(o);
}
return arr;
}
var result = delRepet();
console.log(result)
测试结果
![](https://i-blog.csdnimg.cn/blog_migrate/d27c86186c3e7a872d01d0e8d69aa5c9.jpeg)
2、用hash表来去除重复项,原理同上
1 Array.prototype.unique = function() 2 { 3 var n = {},r=[]; //n为hash表,r为临时数组 4 for(var i = 0; i < this.length; i++) //遍历当前数组 5 { 6 if (!n[this[i]]) //如果hash表中没有当前项 7 { 8 n[this[i]] = true; //存入hash表 9 r.push(this[i]); //把当前数组的当前项push到临时数组里面 10 } 11 } 12 return r;//返回过滤了重复数据组成数组
13 }
二、返回重复数据组成的数组
1 Array.prototype.unique2 = function() 2 { 3 var n = {},r=[],r1=[]; //n为hash表,r为临时数组存放不重复数据,r1存放重复数据 4 for(var i = 0; i < this.length; i++) //遍历当前数组 5 { 6 if (!n[this[i]]) //如果hash表中没有当前项 7 { 8 n[this[i]] = true; //存入hash表 9 r.push(this[i]); //把当前数组的当前项push到临时数组里面 10 }else{ 11 r1.push(this[i]); 12 13 } 14 } 15 return r1;//返回重复数据组成数组 16 }
三、返回重复数组与不重复数组
将数组转化成字符串,使用字符串的匹配方法查找重复数据
1 var arr=[2,3,1,5,4,2,1]; 2 var arr1=[],arr2=[]; 3 var str = arr.join(","); 4 for(var i=0,len=arr.length;i<len;i++){ 5 var isExist = str.search(arr[i]);//这里的search()方法可以换成indexOf() 6 if(isExist){ 7 arr1.push(arr[i]); 8 }else{ 9 arr2.push(arr[i]); 10 } 11 } 12 console.log(arr1,arr2)
hash去重
$.each(shopGroup,function(index,obj){ shopList.push(obj.id); if(!flagObj[obj.cityCode]){//去重 flagObj[obj.cityCode] = true; cityList.push(obj.cityCode); } });
四、字符串去重法---最新方法:
1 var arr=[a,b,c,d]; 2 arr1 = []; 3 for(var i = 0; i < arr.length;i++){ 4 if(arr1.join(',').index("arr[i])" == -1){ 5 arr1.push(arr[i]); 6 } 7 }