0

2 つ以上の引数を持つ min() 関数の JS で可能な最良のアルゴリズムは何ですか?

注: ">" または "<" 演算子と比較できるすべての 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 組み込みのコンパレータ規則の内部。

4

3 に答える 3

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
于 2013-07-23T07:32:09.517 に答える
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
   */

楽しみ 。

于 2013-07-23T10:57:38.940 に答える