JavaScript函数:分割后返回值

问题描述 投票:1回答:4

我写我自己的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语句删除小时?

谢谢你不错的人。

javascript arrays
4个回答
2
投票

怎么样

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

??


2
投票

尝试这个:

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

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


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';
}

希望这是有道理的!


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"
© www.soinside.com 2019 - 2024. All rights reserved.