具有2个或更多参数的min()的javascript最佳算法?

时间:2013-07-23 07:28:43

标签: javascript algorithm min

我想知道JS中有两个或更多参数的min()函数的最佳算法是什么?

注意:它应该适用于任何可与“>”进行比较的JS类型或“<”运营商。例如:

   min( new Date(1959,6,3), new Date(1960,7,8), new Date(1925,6,9));
   /*
     should return: Thu Jul 9 00:00:00 UTC+0200 1925
   */

因此,Math.min和Math.max可能不是很好的候选人。

谢谢...

编辑:我正在考虑这些问题:

   "use strict" ;
   var  d1 = new Date(1959,6,3), d2 = new Date(1960,7,8), d3 = new Date(1925,6,9) ;

   function min (a,b)
   {
    if ( arguments.length > 2 ) {
        var args = Array.prototype.slice.call(arguments,0) ;
           args.shift() ;
              args[0] = min(a,b) ;
       return min.apply( this, args ) ;     
    }
    else {
            return a > b ? b : a ;
    }
   }
    min(d1,d2,d3);
   /*
    returns: Thu Jul 9 00:00:00 UTC+0200 1925
   */

以上可以进行优化,但也适用于2个或更多数字和字符串。当然在JS内部比较器规则中。

3 个答案:

答案 0 :(得分:2)

观看此fiddle

function min(/*...args...*/){
    var len = arguments.length;

    if(len < 1)
        return null;

    var lowest = arguments[0];
    for(var i = 0; i < len; i++){
        if(arguments[i] < lowest)
            lowest = arguments[i];
    }

    return lowest;
}

唯一的事情是(并且你应该根据需要进行更改)是如果没有传递任何参数,它将返回NULL。函数可以根据需要获取尽可能多的参数。

答案 1 :(得分:1)

我认为Min()没问题

来自W3schools:

返回最低值的数字:

var a=Math.min(5,10);
var b=Math.min(0,150,30,20,38);
var c=Math.min(-5,10);
var d=Math.min(-5,-10);
var e=Math.min(1.5,2.5);

a,b,c,d和e的结果将是:

5
0
-5
-10
1.5

答案 2 :(得分:0)

也许这是最佳解决方案:

   "use strict"
    var arr = create_array_of_any_scalar_type_for_testing();
    var min = arr.reduce(function(a, b) {return a < b ? a : b ; });

我也敢想,在所有现代浏览器中,这也是最快的解决方案。 完整的打包解决方案可能是这样的:

   "use strict" ;

   function min (a,b)
   {
    if ( arguments.length > 2 ) {
        var args = Array.prototype.slice.call(arguments,0) ;
        return args.reduce(function(a, b) {return a < b ? a : b ; });
    }
    else {
            return a > b ? b : a ;
    }
   }  

   /* quick test with dates */
   var  d1 = new Date(1959,6,3), d2 = new Date(1960,7,8), d3 = new Date(1925,6,9) ;

    min(d1,d2,d3);
   /*
    returns: Thu Jul 9 00:00:00 UTC+0200 1925
   */

享受。