Haga que la función TimeConvert(num) tome el parámetro num que se está pasando y devuelva el número de horas y minutos en que se convierte el parámetro (es decir, si num = 63, la salida debería ser 1:3). Separe el número de horas y minutos con dos puntos. Otro ejemplo si entrada: 126 luego salida: 2:06. Esto es lo que hice y no entiendo por qué está mal. Para una entrada de 126, me da una salida de 11:06.
function TimeConvert(num) { if(num<60 && num>10){ return 0+":"+num } if(num<10){ return 0+":"+0+num } let object={ 12:720, 11:660, 10:600, 9:540, 8:480, 7:420, 6:360, 5:300, 4:240, 3:180, 2:120, 1:60 } let time="" for (let key in object){ while(num>=object[key]){ time += key num-= object[key] } } return time+":"+num }Como se señaló en los comentarios, hay muchas formas de reducir los minutos a horas y minutos. Sin embargo, para abordar su pregunta de por qué su enfoque está fallando:
Las claves de objeto se tratan como cadenas, no como números. Además, ha declarado el tiempo como una cadena.
Para su enfoque de trabajo, debe realizar AMBOS cambios:
let time="" -> let time = 0
y
time += key -> time += parseInt(key)
Fragmento de trabajo:
console.log(TimeConvert(126)); function TimeConvert(num) { if(num<60 && num>10){ return 0+":"+num } if(num<10){ return 0+":"+0+num } let object={ 12:720, 11:660, 10:600, 9:540, 8:480, 7:420, 6:360, 5:300, 4:240, 3:180, 2:120, 1:60 } let time=0; for (let key in object){ while(num>=object[key]){ time += parseInt(key) num-= object[key] } } if (num<10) { num = "0"+num;} // add leading 0 and coerce to string if num <10; return time+":"+num }¿Por qué no usar este algoritmo?
const getHoursAndMinsString = (num) => { if (num <= 0) { return `0:00` } const hours = Math.floor(num / 60) const mins = num % 60 return `${hours}:${mins.toString().padStart(2, "0")}` }Su búsqueda de object solo codifica n => n * 60, pero solo para un subconjunto de valores posibles, por lo que limita arbitrariamente el rango de valores en los que puede operar su función.
Eliminar eso y usar floor y % para calcular las horas y los minutos respectivamente reduce el código a:
function TimeConvert(num) { let time = Math.floor(num / 60); num = num % 60; if (num < 10) { num = "0" + num; } // add leading 0 and coerce to string if num <10; return time + ":" + num; }Estos cálculos también se pueden hacer en línea si lo prefiere, lo que reduce aún más el código:
function TimeConvert(num) { return Math.floor(num / 60) + ":" + ((num % 60) < 10 ? "0" : "") + (num % 60); }solo tenga cuidado con los valores negativos, o algo superior a 1440, que se desbordaría pasadas las 24 horas y es posible que desee comenzar a mostrarse con días.