删除数字开头的符号 - JS

remove the sign at the beginning of the number - JS

我得到一个计算结果减去结果数。当我想删除这个数字前面的减号时,我收到“.. is not function”警告。这是什么原因?

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));

Uncaught TypeError: cd3F.slice is not a function is not a function

您的 cms 函数将要 return 数字或对象,并且它们都没有 slice 方法。

一个更好的函数是 Math.abs(),它将任何负数转换为正数(并保留任何正数)但请注意它会 return NaN 如果你给它传递一个对象。

为什么这么复杂? n * -1

const cd3F = cms(...); // Result: -3512
cd3F = cd3F < 0 ? cd3F * -1 : cd3F;
console.log(cd3F); // 3512

数字和对象都没有切片方法,因此对于字符串,您首先必须进行以下更改

cd3F.slice(1));

cd3F.toString().slice(1) // also look at brackets

虽然这并不能解决所有用例的问题,因为您有可能 return 一个对象。

我会使用 Math.abs() 因为它将 return NaN(如果它是一个对象)或一个正整数(如果它确实是一个数字)

.slice 方法适用于 strings and arrays,不适用于数字。

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);

你应该使用 Math.abs。只有当它是一个字符串时,你才能使用 .slice(1).

如果您只想要正数,那么您不妨将 Math.abs 放入您的函数中。

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