我目前正在使用以下基于网络示例的功能,每隔一秒调用一次,以显示视频流的当前进度。
我能做些什么来提高效率吗?
function secondstominutes(secs){
var s;
if(secs > 60){
var min = Math.floor(secs / 60);
s = min < 10 ? "0" : "";
s += min +":";
secs = secs - min * 60;
} else {
s = "00:";
}
if(secs < 10){
s+= "0" + Math.floor(secs);
} else {
s += Math.floor(secs);
}
return s;
}
答案 0 :(得分:4)
function secondstominutes(secs)
{
var mins = Math.floor(secs / 60);
secs = secs % 60;
return (mins < 10 ? "0" + mins : mins)
+ ":"
+ (secs < 10 ? "0" + secs : secs);
}
答案 1 :(得分:1)
是的,它可以更简单,并使用更少的Math.floor,局部变量等。这里我的命题:
function secondstominutes(secs)
{
return (Math.floor(secs/60))+":"+secs%60;
}
这将得到如下结果:
0:1,持续1秒 0:10,持续10秒 1:1,持续61秒
等
如果你想要空格等,可以这样做:
function formatZero(number)
{
return (number>9) ? number : "0"+number;
}
function secondstominutes(secs)
{
return formatZero((Math.floor(secs/60)))+":"+formatZero(secs%60);
}
这个是用于实用的单行函数ppls;)
function secondstominutes(secs)
{
return ((arguments[1]=(Math.floor(secs/60)))<10?"0":"")+arguments[1]+":"+((arguments[2]=secs%60)<10?"0":"") + arguments[2];
}
答案 2 :(得分:1)
bobwienholt版本紧凑,快速且清晰,与我实现它的方式非常相似。为了好玩,我做了一些不同的解决方案的分析,我发现它更快一点,但它不是那么清楚,并且在一个声明中隐藏了一个任务:
function secondstominutes(secs)
{
var m = (secs / 60) | 0;
return (m < 10 ? "0" + m : m)
+ ":"
+ ( ( secs %= 60 ) < 10 ? "0" + secs : secs);
}
说明:
var m = (secs / 60) | 0;
将sec除以60并将二进制“或”除以结果为0.二进制“OR”将值转换为整数,并且通过或0,返回结果的整数部分而不进行修改。这比调用 Math.floor()更快,但不太清楚。由于它被转换为整数,你将任何电影的长度限制为2147483647分钟≈35791394小时≈1491308天≈4085年。
( secs %= 60 )
这是做(secs = secs%60)的简短形式。它将 secs 的值除以60并指定 secs 提醒(例如61%60 = 1)。通过分析我发现将计算放在return语句中而不是在它自己的行上更快一点。
(m < 10 ? "0" + m : m)
这计算第一个语句 m&lt; 10 如果是,则第二个语句执行“0”+ m 否则第三个: m 。在英语中:如果 m 小于10,则在开头添加零,否则返回该值。