我想知道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内部比较器规则中。
答案 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
*/
享受。