por qué me muestra 36 aunque el número mínimo es 27
var combination = [27, 36] for (let x in combination) { if (combination[x] < 50) { var min = Math.min(combination[x]) } } console.log(min)Intenté esto de varias maneras como
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) //output-- 5 //it should be 2en este tercer ejemplo agrego (-) a 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) // output-- still 5 // it should be -2nuevamente, cuando estoy agregando (-) a otros números como en -96 o -5, la salida estaba bien (-96), pero cuando estoy agregando (-) a 2, no me muestra -2 en la salida, sino que me muestra 5
no solo en javascript probé esto con lua, php pero el resultado fue el mismo que js
alguien me puede explicar por que pasa esto y como solucionarlo
No está comparando valores para determinar el mínimo, sino simplemente reemplazando la variable min con el último número en la matriz que es menor que 50 . Esto se puede arreglar de la siguiente manera:
let min = undefined; for (let x in combination) { if (combination[x] < 50) { min = min == undefined ? combination[x] : Math.min(min, combination[x]) } } Usando filter y reduce , esto se puede hacer mucho más corto:
combination.filter(x => x < 50).reduce((x, y) => Math.min(x, y))