求数组中的最小值

群里同学出的题目 假设一数组 [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中第一次运行得到 ,只有比较意义






 

 

 

posted on 2013-03-04 16:57  雨弓  阅读(1148)  评论(0编辑  收藏  举报