js数组去重

最近在工作中遇到数组中元素是的对象且需要去重的问题,在网上查找到的解决办法有很多,这里挑选了一种比较靠谱的方法,与大家分享一下,代码如下:
Array.prototype.arrUniq = function() {
	var temp,arrVal, 
		array = this,
		arrClone = array.concat(),//克隆数组
		typeArr = {//数组原型
			'obj' : '[object Object]',
			'fun' : '[object Function]',
			'arr' : '[object Array]',
			'num' : '[object Number]'
	    	},
		ent = /(\u3000|\s|\t)*(\n)+(\u3000|\s|\t)*/gi;//空白字符正则

	//把数组中的object和function转换为字符串形式
	for(var i = arrClone.length; i--;){
		arrVal = arrClone[i];
		temp = Object.prototype.toString.call(arrVal);
		
		if(temp == typeArr['num'] && arrVal.toString() == 'NaN'){
			arrClone[i] = arrVal.toString();
		}

		if(temp == typeArr['obj']){
			arrClone[i] = JSON.stringify(arrVal);
		}

		if(temp == typeArr['fun']){
			arrClone[i] = arrVal.toString().replace(ent,'');
		}
	}

	//去重关键步骤
	for (var i = arrClone.length; i--;) {
  		arrVal = arrClone[i];
  		temp = Object.prototype.toString.call(arrVal);

  		if(temp == typeArr['arr']) arrVal.arrUniq();//如果数组中有数组,则递归
		if (arrClone.indexOf(arrVal) != arrClone.lastIndexOf(arrVal)) {//如果有重复的,则去重
			array.splice(i,1);
    			arrClone.splice(i, 1);
  		}
  		else{
  			if(Object.prototype.toString.call(array[i]) != temp){
  				//检查现在数组和原始数组的值类型是否相同,如果不同则用原数组中的替换,原因是原数组经过了字符串变换
  				arrClone[i] = array[i];
  			}
 		}
    }
    return arrClone;
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值