Javascript函数:拆分后返回值

时间:2014-03-22 20:13:22

标签: javascript arrays

我编写了自己的JS函数,它拆分时间值并将其返回格式化:

function formatTime(a) {
    var time = a.split(":");
    var hours = parseInt(time[0], 10);
    var minutes = parseInt(time[1], 10);
    var seconds = parseInt(time[2], 10);
    return hours + "h" + minutes + "m" + seconds + "s"
}

myTime = "00:38:51";
formatTime(myTime);

结果是0h38m51s,这很好。但是,现在我想删除设置为0的小时。我可以在没有if语句的情况下实现这一点吗?

谢谢你们好心人。

4 个答案:

答案 0 :(得分:2)

试试这个:

var hours = parseInt(time[0], 10);
hours = hours && (hours + 'h');
        :
return hours || '' + minutes + "m" + seconds + "s"

诀窍是,&&返回其第一个操作数,如果它被评估为falsy(0是一个假值)。然后在return ||中返回第二个操作数,如果第一个操作数被评估为falsy。

答案 1 :(得分:2)

怎么样

return (hours ? (hours + "h") : "") + 
       (minutes ? (minutes + "m") : "") + 
       seconds + "s"

...

答案 2 :(得分:1)

我用三元运算符摆脱了0h:

t[i] = parseInt(t[i]) == 0 ? '' : parseInt(t[i]) + s[i + s.length - t.length]; 

与以下内容相同:

if(parseInt(time[0], 10) == 0) { 
    time[0] = ''; 
} else { 
    time[0] = time[0] + 'h';
}

希望它有意义!

答案 3 :(得分:1)

想要没有if条件,显式或三元运算符吗?有可能:

function formatTime(a) {

    var time = a.split(/:/),
        formatted = '', val, 
        units = ['h', 'm', 's'];

    while (time.length && (val = parseInt(time.pop(), 10))) {
        formatted = val + units.pop() + formatted;
    }

    return formatted;
}

formatTime('00:38:51'); // "38m51s"
formatTime('02:38:51'); // "2h38m51s"