Coderbyte上的TimeConvert JavaScript函数

时间:2015-12-02 11:59:18

标签: javascript function

我正在对Coderbyte进行挑战,如果对我的问题有任何建议,我将不胜感激:

我知道有一种更简单的方法可以解决这个问题(我后来发现):

function TimeConvert(num) { 
  var hours = Math.floor(num / 60);  
  var minutes = num % 60;
  return hours + ":" + minutes; 
  } 

...所以TimeConvert(123);将是2:3

我知道我的答案更复杂,但为什么我试图回答这个问题的方式不起作用?我错过了什么?对于输入的任何数字,它只返回0:00:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;

    for(var i=0; i<=num; i+=60) {//loop through number every 60
        if(num[i]>=60) { //for every 60 add 1 hour
            hours+=1;
        }else if(num[i]<60){
            minutes=num[i];
        }
    }

  var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
        }else if(minutes>10){
            newMinutes=minutes;
        }

    return(hours + ":" + newMinutes);          
}

谢谢你们!^^

3 个答案:

答案 0 :(得分:2)

你为什么要num[i]>=60?您需要检查的是num>=60num<60num[i]将始终为未定义的值,num不是字符串。 (如果它是一个字符串,则num [i]将打印与该索引对应的字符。)因此,您需要比较num而不是num[i]

    function TimeConvert(num) { 
    var hours=0;
    var minutes=0;
    var times = num;
    for(var i=0; i<times; i+=60) {//loop through number every 60
        if(num>=60) { //for every 60 add 1 hour
            hours+=1;
            num -= 60;
        }else if(num<60){
            minutes=num;
        }
    }

  var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
        }else if(minutes>10){
            newMinutes=minutes;
        }

    return(hours + ":" + newMinutes);          
}

console.log(TimeConvert(123));

Updated Fiddle

答案 1 :(得分:0)

谢谢!我实际上找到了解决这个问题的两种方法。首先,我应该迭代1而不是60,并且在第一个if语句中,我需要为每次迭代减去60,如下所示:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;

    for(var i=0; i<=num; i++) {
        if(num>=60) { //for every 60 add 1 hour
            hours+=1;
            num-=60;//makes sure that the loop goes every 60
        }else if(num<60){
            minutes=num;
        }
    }

//下面没有必要为Coderbyte添加造型的原因。第二个答案相同

    var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
    }else if(minutes>10){
            newMinutes=minutes;
    }

//写分钟而不是newMinutes(对于Coderbyte)。第二个答案也一样。

  return(hours + ":" + newMinutes); 
  }

我想通过while循环来解决这个问题:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;
    var newMinutes=0;

    while(num>=60) {
        hours+=1;
        num-=60;
    }

    if(num<60){
      minutes=num;
    }

    if (minutes<10){
      newMinutes="0"+minutes;
    }else if(minutes>10){
      newMinutes=minutes;
    }

    return(hours + ":" + newMinutes);          
}

答案 2 :(得分:0)

除了Template Literals以外,您还可以为单行return语句添加ES6 Math.floor()

function TimeConvert(num) { 
  return `${Math.floor(num/60)}:${num%60}`; 
}