我正在使用Math.min()
查找最低价格,但如果产品不可用,有时传递的变量可能会0
:
Math.min( 101.06, 99.99, 0 );
..在这种情况下,结果为0
。如何过滤掉它?
答案 0 :(得分:3)
我猜你想要最小的正数:
function positiveMin(arr) {
var min;
arr.forEach(function(x) {
if (x <= 0) return;
if (!min || (x < min)) min = x;
});
return min;
}
positiveMin([101.06, 99.99, 0, -1]); // => 99.99
positiveMin([0]); // => undefined
答案 1 :(得分:3)
您可以使用.apply
将参数作为数组传递,
fun.apply(thisArg,[argsArray])
- https://developer.mozilla.org/
这意味着您可以过滤参数,检查您想要的任何属性。
所以,在你的情况下,只需:
Math.min.apply(this, [101.06, 99.99, 0].filter(Number) );
这种方法也有其他好处,看起来你会动态生成你的参数,传递生成的数组比实际的参数更容易。
答案 2 :(得分:0)
这是一个简单的功能:
Math.positiveMin = function(){
arguments = Array.prototype.slice.call(arguments);
return arguments.reduce(function(min, current){
return (current > 0 && current < min) ? current : min;
}, arguments[0]);
};
如果没有大于0的参数,则返回零。
这种方法可能比我之前的好处:你在你的例子中单独传递参数,你可以用这种方法做到这一点:
Math.positiveMin( 101.06, 99.99, 0 );
将按预期工作,无需数组。