js 排序 循环

forEach用法:

var a="2,78,5,6,87,34,65,23,5,22,67,889,3,45,78,3,453545434,323232,25656565,333334,222222222";
//用空间换时间算法
	function sortA(s){
		var ary=s.split(",");
		var temp=[];
		var result=[];
		ary.forEach(function(item){
			if(temp[item]==undefined){
				temp[item]=1;
			}else{
				temp[item]++;
			}
		});
		temp.forEach(function(item,index){
			while(item-->0){
				result.push(index);
			}
		})
		return result.join(",");
	}
	alert(sortA(a));

for in用法:

var a="2,78,5,6,87,34,65,23,5,22,67,889,3,45,78,3,453545434,323232,25656565,333334,222222222";
//用空间换时间算法
	function sortA(s){
		var ary=s.split(",");
		var temp=[];
		var result=[];
		for(var i in ary){
			if(temp[ary[i]]==undefined){
				temp[ary[i]]=1;
			}else{
				temp[ary[i]]++;
			}
			
		}
	    for(var i in temp){
			while(temp[i]-->0){
				result.push(i);
			}
		}
		
		return result.join(",");
	}

	alert(sortA(a));

for(;;)用法:

var a="2,78,5,6,87,34,65,23,5,22,67,889,3,45,78,3,453545434,323232,25656565,333334,222222222";
//用空间换时间算法
	function sortA(s){
		var ary=s.split(",");
		var temp=[];
		var result=[];
		for(var i=0;i<ary.length;i++){
			if(temp[ary[i]]==undefined){
				temp[ary[i]]=1;
			}else{
				temp[ary[i]]++;
			}
			
		}
	   for(var i=0;i<temp.length;i++){
		   if(temp[i]!=undefined){
			while(temp[i]-->0){
				result.push(i);
			}
		   }
		}
		
		return result.join(",");
	}

	alert(sortA(a));

结果 forEach和for(;;)及其慢,但最终还是会出结果,for in瞬间出结果

原因是for in遍历的时候会跳过值为undefined的数组项;for(;;)遍历了数组的所有项

对于forEach

var a=[];
a[100]=1;
a.forEach(function(item){
console.log(item);
});

控制台只输出了1;表面上来看forEach也跳过了值为undefined的数组;但是这并不表示forEach方法没有遍历所有数组项;因为forEach是数组对象的一个方法,实现此方法的代码遍历了数组的所有项,只是判断数组项的值为undefined就不做处理(处理即为执行传入函数);

用js,对于这种简单数值排序有没有更好的方法了?

当然有:

ary.sort(function(a,b){
			return Number(a)>Number(b)?1:(a==b?0:-1);
		});

哈哈 没事不要用自己写的排序,特殊情况除外,js源生的排序都是用c编写的,效率那叫一个快;

这里主要弄清下平时常用的几个循环的细微差距。

 

转载于:https://my.oschina.net/u/3071114/blog/1358545

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值