数组去重简单的几类方法和typeof的封装

在平时做案例等时经常会遇到数组去重的问题,之前一直都是选择不理睬的态度,不过这样‘错误的选择’并没有持续多久,某天还是把它弄懂了,哈哈哈,开心。据听说数组去重在面试中也会问道,所以赶紧拿个小本本记下

数组去重有好多方法,目前我只学到了2种,不过,这两种方法可是非常实用的,当然也非常理解,牢记。

1.利用对象的属性不会重复的原理进行去重

 把数组里的每一位放在对象里面,当做它的属性名,挨个访问这对象的属性名看有没有这个属性值

例:var arr =[1,1,1,2,2,2,2,2,3,3,5,6,7];

       var temp = {};

       遍历一遍数组arr,arr[0] =1,arr[1]=1,arr[2]=1,相继的与temp对象属性值做对比,temp[0]=undefined,就将arr数组的第一个值当作temp的“键”,并随意给他写个“值”,等到第二次遇到arr[1],temp已经有个相应的属性了,就直接忽视了,这样就达到去重的效果。代码如下

 

var arr =[1,1,1,2,2,2,2,2,3,3,5,6,7];
      Array.prototype.unique  = function(){
      	var temp = {},
      	    arr = [],
      	    len = this.length;
      	    for(var i = 0;i<len;i++){
      	    	// 拿出当前对象的当前的数组位
      	    	if(!temp[this[i]]){
      	    		temp[this[i]] = 'abc';//一定要给temp对象赋值(值随便)
      	    		arr.push(this[i]);
      	    	}
      	    }
      	 return arr;
}
//输出结果
arr.unique();
(6) [1, 2, 3, 5, 6, 7]

2.采用ES6中的set方法

在es6中,set就是一构造函数,类似于数组,它是不允许内部出现相同的元素的。利用这一属性达到去重目的。

      const set=new Set([1,1,3,'3',7,9,4,8]);//此时set为set型数组,并非正常数组

       console.log([...set]);//神奇三点将set型数组转换为正常数组
       console.log(Array.from(set));
       //打印结果为:
       [1, 3, "3", 7, 9, 4, 8]
       [1, 3, "3", 7, 9, 4, 8]

好了,去重就说到这,下面加一个小插曲,一个typeof的封装,嘿嘿嘿嘿嘿

typeof的封装

<script>

           function type(target){
           	var ret = typeof(target);
               var template = {
                   	       '[object Object]':'object-Object',
                   	       '[object Array]':'array-Object',
                   	       '[object Number]':'number-Object',
                   	       '[object Boolean]':'boolean-Object',
                   	       '[object String]':'string-Object'
                   }
                   if(target===null)  {
                   	return null;
                   }else if(ret == 'object'){
                   	var str = Object.prototype.toString.call(target);
                   	return template[str];
                   }else{
                   	return ret;
                   }
           }
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值