拆分字符串后的数组值“未定义”?

时间:2019-05-06 14:45:02

标签: javascript string

我正在使用冒号拆分格式为“ 0:00:00”的函数。完成此操作后,我将单独的数字保存到单独的变量中,从而进行一些计算。我在.split函数之后试图访问它们的值给出了'undefined',但我不确定为什么。

我尝试使用replace代替split,但是split是使用更少的代码来完成我想要的事情(能够将值分开)的更简便方法。

这是我的控制台在输入时间争夺输入框时显示的内容: enter image description here 我认为该错误是由于每次击键的时间更新而引起的,因此可以说是在输入整个时间之后才说出来。

calcPace(time, distance){
  var minutes = 0;
  var seconds = 0



  var hms = time+'';   // your input string
  var intDist = distance+'';
  intDist = parseFloat(distance, 10);
  var a = hms.split(':'); // split it at the colons

  // minutes are worth 60 seconds. Hours are worth 60 minutes.
  var totalMinutes = ((+a[0]) * 60) + ((+a[1])) + (+a[2] / 60);

  console.log(a[0]); //gives 'undefined, should be a number 0-6

  var paceValue = totalMinutes / intDist;
  minutes = Math.floor(paceValue);
  seconds = Math.round((paceValue - minutes) * 60);

  console.log(totalMinutes)
  if(seconds < 10) {
        seconds = "0" + seconds;
    }

  var paceValue = minutes+":"+seconds;

  this.setState({
     pace: paceValue//paceValue
  });
}

函数在这里被调用

handleButtonPress(){
  console.log("pressed");
  this.calcPace(this.time, this.distance);

}

当我打印progressValue时,结果是NaN:NaN以及分钟和秒。拆分后检查数组位置时,值未定义。我需要那里有数字,并且预期的输出应该是“ 5:24”或类似的数字。

1 个答案:

答案 0 :(得分:1)

由于这些行而可能发生此错误

var a = hms.split(':')
...
var totalMinutes = ((+a[0]) * 60) + ((+a[1])) + (+a[2] / 60);
...
minutes = Math.floor(paceValue);
seconds = Math.round((paceValue - minutes) * 60);

如果hms.split(':')不返回长度为3的数组。a[x]可以为undefined

如果将undefined除以数字,它将返回NaN

所以您得到undefined的原因是,hms可能不是3 :的字符串
例如('0:00:00')。

我建议您进行检查并根据totalMinutes有条件地创建a