así que tengo este código aquí y el valor que quiero recibir de esta matriz [2,1,2,0,1] es 1, sé cómo hacer que salte 0 pero por alguna razón acepta 2 como el valor más bajo, ¿alguien puede explicarme por qué y encontrar una manera de lidiar con eso?
let lowestP = 100000000000000000000000000 let highestP = 0 let startWorking = 0 for(let i = 0; i < prices.length;i++){ if(lowestP > prices[i] && prices[i] > 0){ lowestP = prices[i] }if(highestP<prices[i]){ highestP = prices[i] } if(prices.indexOf(lowestP) > prices.indexOf(highestP)){ highestP = 0 continue } startWorking = highestP - lowestP }return startWorking };Hice algunos registros de consola y parece que los primeros 2 en [2,1,2,0,1] son el problema, aún así no encontré la solución
let prices = [2, 1, 2, 0, 1]; let lowestP = 999999999999999; prices.forEach((price, index) => price > 0 && lowestP > price ? (lowestP = prices[index]) : null );Debe conservar el índice de la p más baja y más alta, prices.indexOf(highestP), para los 2 segundos índice de retorno de los 2 primeros en la lista de precios.
var maxProfit = function (prices) { let lowestP = 100000000000000000000000000 let highestP = 0 let startWorking = 0 for (let i = 0; i < prices.length; i++) { if (lowestP > prices[i] && prices[i] > 0) { lowestP = prices[i] index_lowest = i } if (highestP < prices[i]) { highestP = prices[i] index_highest = i } if (index_lowest > index_highest) { highestP = 0 continue } startWorking = highestP - lowestP } return startWorking }Siempre debe tratar de estructurar su código para que sea autodocumental.
Si, por ejemplo, primero desea filtrar su matriz para que ciertos valores no existan, use filter , si busca el mínimo o el máximo, luego use las funciones correspondientes.
Para pasar la matriz filtrada a la función Math.min , puede usar la sintaxis extendida ( ... )
let prices = [2, 1, 2, 0, 1] prices = prices.filter(value => value > 0); if (prices.length === 0) { console.error('no prices larger then 0') } else { let lowestP = Math.min(...prices); console.log(lowestP) }