我需要至少a
,b
,c
和d
。但是当它们中的一个或多个为0时,它们就会脱离比较。我可以用if
/ else
级联来解决这个问题,但这有点难看。有没有更清洁的方法来解决这个问题?单独Math.min
不起作用,因为当其中一个变量为0时,它将导致0。
我可以将它们放在一个数组中并删除该数组中的所有0吗?数组有Math.min
吗?
bestPrice: Ember.computed('a', 'b', 'c', 'd', function() {
var a = this.get('a');
var b = this.get('b');
var c = this.get('c');
var d = this.get('d');
return Math.min(a, b, c, d);
}),
示例:
bestPrice:10
答案 0 :(得分:1)
这个怎么样?
prices: Ember.computed.collect('a', 'b', 'c', 'd'),
bestPrice: Ember.computed('prices', function() {
var nonzero = this.get('prices').filter(function (x) { return x > 0; });
return Math.min.apply(null, nonzero);
}),
答案 1 :(得分:1)
如果你只需要忽略0,另一种方法(不同于过滤/减少)将用0
替换+Infinity
值,因此Math.min
不会将它们视为最小值:
bestPrice: Ember.computed('a', 'b', 'c', 'd', function() {
var a = this.get('a') || Infinity;
var b = this.get('b') || Infinity;
var c = this.get('c') || Infinity;
var d = this.get('d') || Infinity;
return Math.min(a, b, c, d);
})
优点:
缺点:
答案 2 :(得分:0)
为什么不把它们放在一个数组中并循环遍历它们?循环的每次迭代都会检查一个值是否为零并且是否小于当前最小值。像
这样的东西var values = [a, b, c, d],
var min = -1;
for(var i = 0; i < values.length; i++)
{
if(values[i] == 0)
continue;
if(values[i] < min || min == -1) // Also check if min is not yet assigned a value
min = values[i];
}
return min;
顺便说一句,抱歉,如果我的任何语法错误。我的Javascript现在有点生疏。
答案 3 :(得分:0)
可能的解决方案:
var numbers = [a, b, c, d];
function findMin(array) {
var minimum;
for (var i = 0; i < array.length; i++) {
if (!minimum) {
if (array[i] !== 0) {
minimum = array[i];
}
if (i === array.length - 1) {
return 'All zeroes';
}
} else {
if (array[i] === 0) {
continue;
} else {
if (array[i] < minimum) {
minimum = array[i];
}
}
}
}
return minimum;
}
findMin(numbers);