求数组中的最小值

群里同学出的题目 假设一数组 [null, 2, 5, null, 10, 3] 求最小值

比较坑的的那个null 如果直接 Math.min.apply(Math, arr)的话 null会捣乱 得到0

 

想到三种方法 

1 for 循环

2 sort排序

3 把null干掉

 

测试了下三个的效率

代码如下

先造个大数组

var a = []
    ,b=  [null, 2, 5, null, 10, 3]
var i = 1000
while(i--){
 a = a.concat(b)
}

  

1 for循环

console.time('for')
var min = null
for (var i = 0,j=a.length;i<j;i++){
    if (a[i] ===null) continue
   
    if (null === min || min > a[i]) min = a[i]
   
} 
console.log('for min' , min)
console.timeEnd('for')

结果

for min 2
for: 21ms

2 sort排序

console.time('sort')
min = a.sort(function(v1,v2){
if(v1==null)return 1;
if(v2==null)return -1;
return v1-v2;
})[0]
console.log('sort min' ,min)
console.timeEnd('sort')

结果

for min 2
for: 35ms

 

console.time('str')

a = a.join('|').replace(/\|\|/g,'|').replace(/^\|/,'').replace(/\|$/,'').split('|')
min = Math.min.apply(Math,a)
console.log('str min' , min)
console.timeEnd('str')

结果

for min 2
for: 2ms

 

结果是 借助字符串处理数组 速度最快  ;sort最慢

 

以上结果为firebug中第一次运行得到 ,只有比较意义






 

 

 

转载于:https://www.cnblogs.com/vaal-water/archive/2013/03/04/2943033.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值