我正在使用冒号拆分格式为“ 0:00:00”的函数。完成此操作后,我将单独的数字保存到单独的变量中,从而进行一些计算。我在.split函数之后试图访问它们的值给出了'undefined',但我不确定为什么。
我尝试使用replace代替split,但是split是使用更少的代码来完成我想要的事情(能够将值分开)的更简便方法。
这是我的控制台在输入时间争夺输入框时显示的内容: 我认为该错误是由于每次击键的时间更新而引起的,因此可以说是在输入整个时间之后才说出来。
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”或类似的数字。
答案 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
。