Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数:分割后返回值_Javascript_Arrays - Fatal编程技术网

Javascript函数:分割后返回值

Javascript函数:分割后返回值,javascript,arrays,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" + secon

我编写了自己的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语句,我可以实现这一点吗

谢谢大家。

试试这个:

var hours = parseInt(time[0], 10);
hours = hours && (hours + 'h');
        :
return hours || '' + minutes + "m" + seconds + "s"
诀窍是,
&&
如果对第一个操作数求值为falsy(0是falsy值),则返回它的第一个操作数。然后,如果第一个操作数的计算结果不正确,则在
返回
|
中返回其第二个操作数。

尝试以下操作:

var hours = parseInt(time[0], 10);
hours = hours && (hours + 'h');
        :
return hours || '' + minutes + "m" + seconds + "s"
诀窍是,
&&
如果对第一个操作数求值为falsy(0是falsy值),则返回它的第一个操作数。然后在
返回中
| |
如果第一个操作数的计算结果是错误的,则返回第二个操作数。

如何

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

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

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

希望它有意义

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

希望它有意义

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

想要使它没有
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"


您可以使用三元运算符执行此操作,但我不明白为什么要避免使用
if
http://jsfiddle.net/QJq7B/
但我决定自己编写代码,我不确定他是如何在小时内消除0值的。我不回答这个问题吗?->这是一个不同的问题@adeneo我最终编写了我自己的函数看起来完全一样,看看我被否决的删除答案,它完全符合你的要求?你可以使用三元运算符,但是我不明白为什么你想要避免一个
如果
。另一个成员做了这个
http://jsfiddle.net/QJq7B/
但我决定自己编写代码,我不确定他是如何在小时内消除0值的。我不回答这个问题吗?->这是一个不同的问题@adeneo我最终编写了我自己的函数它似乎完全一样,看看我被否决的删除答案,它完全符合你的要求?
hours+“h”
可能永远不会出错。你编辑的代码不会放
“h”
当小时数为非零时输入字符串。正在退出内容。我会去读更多关于三元运算符的内容!感谢您的输入。
hours+“h”
可能永远不会出错。当小时数不为零时,您编辑的代码不会将
“h”
放入字符串。正在退出。我会去读更多关于三元运算符的内容!感谢您的输入。手动操作似乎非常有用!如果还有其他的话,要除掉吗?它们的真正目的是什么(我也会继续读下去)@J.D三元运算符的行为就像if/else语句一样<代码>(条件)?(如果为真,则返回):(如果为假,则返回)(条件)?(如果为真,则返回):(如果为假,则返回)测试?expr1:expr2
检查
test
是否具有真实值。如果是,整个表达式将返回计算结果
expr1
。如果不是,则返回求值的值
expr2
。由于JS中的
0
不是真实值(虚假值为
false
、0,-0、
null
undefined
NaN
、和
;其他值都是真实值),这将在您关心的情况下返回一个空字符串,当
hours
为零时。请您用伪代码解释一下您的答案。。。如果为“小时”,则检查是否有值,如果为真,则返回“(小时+“h”)。否则:“什么也不归还?但是0仍然是一个值,几乎就是这样<代码>测试?expr1:expr2
检查
test
是否具有真实值。如果是,整个表达式将返回计算结果
expr1
。如果不是,则返回求值的值
expr2
。由于JS中的
0
不是真实值(虚假值为
false
、0,-0、
null
未定义的
NaN
、和
;其他所有值都是真实值),因此当
小时数
为零时,这将返回一个空字符串,而这正是您关心的情况。