【问题标题】:Javascript function: Returning value after a splitJavascript函数:拆分后返回值
【发布时间】:2014-03-22 20:13:21
【问题描述】:

我编写了自己的 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 语句的情况下实现这一点吗?

谢谢各位好心人。

【问题讨论】:

  • 您可以使用三元运算符来执行此操作,但我不明白您为什么要避免使用 if
  • 另一个成员制作了这个http://jsfiddle.net/QJq7B/,但我决定自己编写代码,我不确定他是如何在小时内摆脱 0 值
  • 这是一个不同的问题@adeneo 我最终编写了自己的函数
  • 看起来完全一样,看看我删除的被否决的答案,它完全符合你的要求吗?

标签: javascript arrays


【解决方案1】:

怎么样

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

??

【讨论】:

  • 您能否用伪代码解释您的答案...如果“小时”?检查是否有值,如果为真则返回 "(hours + "h")。否则 ":" 什么也不返回?但是 0 仍然是一个值。
  • 差不多了。 test ? expr1 : expr2 检查test 是否具有真值。如果是,则整个表达式返回计算 expr1 的结果。如果不是,则返回评估 expr2 的值。由于0 在 JS 中不是真值(假值是 false、0、-0、nullundefinedNaNNaN"";其他所有值都是真值)这将返回当hours 为零时,正是您关心的情况下的空字符串。
【解决方案2】:

试试这个:

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

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

【讨论】:

  • hours + "h" 可能永远不会是假的。
  • 当小时数不为零时,您编辑的代码不会将"h" 放入字符串中。
  • 退出的东西。生病去阅读更多关于三元运算符的信息!感谢您的意见
【解决方案3】:

我用三元运算符去掉了 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';
}

希望它有意义!

【讨论】:

  • 三元运算符似乎很有用!摆脱其他等?他们的真正目的是什么(我也会去读一读)
  • @J.D 三元运算符的作用类似于 if / else 语句。 (condition) ? (this returns if true) : (and this returns if false);
  • 其实最好避免用三元替换if/else,这里有很好的解释stackoverflow.com/questions/6248920/…
【解决方案4】:

想要不使用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"

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多