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