数组去重的方法

一、返回 去重后数组
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)
 
测试结果
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 }

 

 

转载于:https://www.cnblogs.com/weilantiankong/p/4712267.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值