Obtengo un resultado de cálculo menos el número resultante. Cuando quiero eliminar el signo menos delante de este número, recibo una advertencia "... no es una función". ¿Cuál es la razón de esto?
function cms(miliseconds, format) { let days, hours, minutes, seconds, total_hours, total_minutes, total_seconds; total_seconds = parseInt(Math.floor(miliseconds / 1000)); total_minutes = parseInt(Math.floor(total_seconds / 60)); total_hours = parseInt(Math.floor(total_minutes / 60)); days = parseInt(Math.floor(total_hours / 24)); seconds = parseInt(total_seconds % 60); minutes = parseInt(total_minutes % 60); hours = parseInt(total_hours % 24); switch (format) { case 's': return total_seconds; case 'm': return total_minutes; case 'h': return total_hours; case 'd': return days; default: return {d: days, h: hours, m: minutes, s: seconds}; } } const cd3F = cms(...); // Result: -3512 cd3F.slice(1));
TypeError no detectado: cd3F.slice no es una función no es una función
Su función cms
devolverá un Número o un Objeto, y ninguno de ellos tiene un método de slice
.
Una mejor función para usar sería Math.abs() , que convertirá cualquier número negativo en uno positivo (y dejará cualquier número positivo solo), pero tenga en cuenta que devolverá NaN
si le pasa un objeto.
El método .slice es para cadenas y matrices , no para números.
function cms(miliseconds, format) { let days, hours, minutes, seconds, total_hours, total_minutes, total_seconds; total_seconds = parseInt(Math.floor(miliseconds / 1000)); total_minutes = parseInt(Math.floor(total_seconds / 60)); total_hours = parseInt(Math.floor(total_minutes / 60)); days = parseInt(Math.floor(total_hours / 24)); seconds = parseInt(total_seconds % 60); minutes = parseInt(total_minutes % 60); hours = parseInt(total_hours % 24); switch (format) { case 's': return total_seconds; case 'm': return total_minutes; case 'h': return total_hours; case 'd': return days; default: return {d: days, h: hours, m: minutes, s: seconds}; } } const cd3F = cms(...); // Result: -3512 const abs_cd3F = Math.abs(cd3F);
Deberías usar Math.abs . Solo si fuera una cadena, podrías usar .slice(1).
Si solo desea números positivos, también puede colocar Math.abs dentro de su función.
function cms(milliseconds, format) { milliseconds = Math.abs(milliseconds); let days, hours, minutes, seconds, total_hours, total_minutes, total_seconds; total_seconds = parseInt(Math.floor(milliseconds / 1000)); total_minutes = parseInt(Math.floor(total_seconds / 60)); total_hours = parseInt(Math.floor(total_minutes / 60)); days = parseInt(Math.floor(total_hours / 24)); seconds = parseInt(total_seconds % 60); minutes = parseInt(total_minutes % 60); hours = parseInt(total_hours % 24); switch (format) { case 's': return total_seconds; case 'm': return total_minutes; case 'h': return total_hours; case 'd': return days; default: return {d: days, h: hours, m: minutes, s: seconds}; } } const cd3F = cms(-3512000, "s"); // Result: 3512
¿Por qué tan complicado? n * -1
const cd3F = cms(...); // Result: -3512 cd3F = cd3F < 0 ? cd3F * -1 : cd3F; console.log(cd3F); // 3512