为什么 JavaScript 的行为不同

为什么它向我展示36,尽管最小数字是27

   var combination = [27, 36]

    for (let x in combination) {
        if (combination[x] < 50) {
            var min = Math.min(combination[x])
        }
    }

    console.log(min)

我尝试了多种方式,例如

    var combination = [27, 30, 40, 44, 3, 239, 329, 2, 5, 20923, 96]

    for (let x in combination) {
        if (combination[x] < 50) {
            var min = Math.min(combination[x])
        }
    }

    console.log(min) //输出--  5         //应该是2

在这第三个例子中,我给2加了(-)

var combination = [27, 30, 40, 44, 3, 239, 329, -2, 5, 20923, 96]

for (let x in combination) {
    if (combination[x] < 50) {
        var min = Math.min(combination[x])
    }
}

console.log(min) // 输出-- 仍然是5     // 应该是-2

当我给其他数字如-96或-5添加(-)时,输出是正常的(-96),但当我给2添加(-)时,输出不是-2,而是5

不仅在 JavaScript 中,我尝试了 lua,php,但输出与 js 相同

有人能解释为什么会发生这种情况,以及如何解决这个问题吗?

原文链接 https://stackoverflow.com/questions/71276291

点赞
stackoverflow用户7185318
stackoverflow用户7185318

你没有比较值来确定最小值,而是仅仅用小于“50”的数组中的最后一个数字替换min变量,这可以通过以下方式解决:

let min = undefined;
for (let x in combination) {
    if (combination[x] < 50) {
        min = min == undefined ? combination[x] : Math.min(min, combination[x])
    }
}

使用filterreduce,可以将这个代码变得更加简短:

combination.filter(x => x < 50).reduce((x, y) => Math.min(x, y))
2022-02-26 12:21:22