js中数组的去重

js对象有一个特性:

  js中对象的key(属性名)是永远不会重复的!

js数组去重

方法一:

		//将数组arr去掉重复的值
		var arr = [3,1,5,1,23,5,11];
		//1.把数组元素转换成对象属性
		function toObject(arr){
			var obj = {};
			var j;
			for(var i=0,j=arr.length;i<j;i++){
				obj[arr[i]] = true; //利用js对象属性名不会重复的特性,将数组元素设置为对象属性
				//console.log(obj);
			}
			return obj;
		}
		//2.把对象属性转换回新数组元素
		function toArray(obj){
			var arr = [];
			for(var attr in obj){
				if(obj.hasOwnProperty(attr)){
					arr.push(attr);
				}
			}
			return arr;
		}
		//去重函数
		function uniq(arr){
			return toArray(toObject(arr));
		}
		alert(uniq(arr));
以上时雅虎yui的一段源码,但是我测试的时候结果是[1,3,5,11,23],obj对象在设置属性的时候进行了自动排序,我暂时还不知道是什么原因。


方法二:

下面是网上查的一个方法,原理应该跟上面是一样的

		var arr = [3,1,5,1,23,5,11];
		function uniq(arr){
			var obj = {}, newArr = []; //空对象和新数组
			for(var i=0;i<arr.length;i++){
				if(!obj[arr[i]]){
					obj[arr[i]] = true;
					newArr.push(arr[i]);
				}
			}
			return newArr;
		}
		alert(uniq(arr)) //[3,1,5,23,11]

方法三:

利用indexOf()

		function uniq(arr){
			var newArr = [];
			for(var i=0;i<arr.length;i++){
				if(newArr.indexOf(arr[i])==-1){ //js在执行indexOf方法时会遍历数组直到找到,会耗费很多时间
					newArr.push(arr[i]);
				}
			}
			return newArr;
		}
		alert(uniq(arr))
indexOf()效率并不高





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值