我没有得到最小值,它显示0,但在Math.max()的情况下,它显示正确的最大值,为什么是这样? &g



我没有得到最小值,它显示0,但在这种情况下,Math.max(),它显示正确的最大值。为什么会这样呢?

function values(ar) {
var min_val = 0;
for(var i = 0; i < ar.length; i++) {
min_val = Math.min(min_val,ar[i]);
}
document.write(min_val);
}
values([14,99, 10, 18,19, 11, 34]);

它总是返回0,因为您将它与min_val进行比较。其中min_val成为最低值,因为0比数组中的任何值都小。因此,min_val将始终被设置为等于自身并保持为0。下面是我的修复:

let ar =[14,99,10,18,19,11,34]
let min_val = Math.min(...ar)
console.log(min_val)
这也比for循环更优雅。

对于你期望的行为,为了找到最小值,你想从绝对最大值(无穷大)开始。

var min_val = Infinity;
for(var i = 0; i < ar.length; i++) {
min_val = Math.min(min_val,ar[i]);
}
document.write(min_val);
}
values([14,99, 10, 18,19, 11, 34]);```

这将为空数组或输入的最小值写入Infinity

Math.min()接收像Math.min(-2, -3, -1)或与数组Math.min(...arr)的参数。你给这些参数Math.min([14,99, 10, 18,19, 11, 34], 0),其中0是最小值。所以你收到的是0。此外,不需要循环,因为Math.min()找到了最小值。所以,解决方案是:

function values(ar) {
var min_val = Math.min(...ar);
//document.write(min_val);
return min_val
}
console.log(values([14,99, 10, 18,19, 11, 34]))

function values(ar) {
var min_val = Math.min(...ar);

document.write(min_val);
}

简写:

document.write(Math.min(...ar));