Javascript 比较错误还是我遗漏了什么?
Javascript comparison bug or am I missing something?
所以,我有 JS 代码,用于从服务器获取有关 2 个传感器温度的数据。数据包含在一个文本文件中,其中每行包含一个温度计的日期和 2 个值。我设法将这些数据分别解析为日期和值的数组。我可以找到每个数组的最小值和最大值,但是当我尝试从两个温度数组中获取最小值和最大值时,我得到了错误的数据。温度值存储在 data.temperature
中,这是一个包含 2 个值的数组,每个值对应一个温度计(data
是一个包含 属性 temperature
的对象数组,作为两个值的数组)。我使用了一个调试器,在比较两个明显错误的值时,代码在多个点上抛出错误 (19>6=false)。
代码如下:
extremes.minTempAbsolute = [0, 0];
for(var i = 1; i < data.length; i++){
for(var j = 0; j < data[i].temperature.length; j++){
if(data[i].temperature[j] < data[extremes.minTempAbsolute[0]].temperature[extremes.minTempAbsolute[1]]){
extremes.minTempAbsolute = [i, j];
}
}
}
extremes.maxTempAbsolute = [0, 0];
for(var i = 1; i < data.length; i++){
for(var j = 0; j < data[i].temperature.length; j++){
if(data[i].temperature[j] > data[extremes.maxTempAbsolute[0]].temperature[extremes.maxTempAbsolute[1]]){
extremes.maxTempAbsolute = [i, j];
}
}
}
对象 extremes
包含 data
数组中那些极值的索引。 minTempAbsolute
和 maxTempAbsolute
包含两个索引的数组 - 一个用于 data
,一个用于 temperature
。
在某一时刻,它正在比较 data[i].temperature[j] > data[extremes.maxTempAbsolute[0]].temperature[extremes.maxTempAbsolute[1]]
,其中 i
是 1540,j
是 0,maxTempAbsolute[0]
是 460,maxTempAbsolute[1]
是 1。因此:
data[1540].temperature[0] > data[460].temperature[1]
19 > 6
false
当我获取这些值并将它们记录到控制台时,它显示第一个值是 19,第二个值是 6,但它仍然无法正确比较它们(如上所示)。
我猜它也会以某种方式比较索引,因为:
data[1540].temperature[1] > data[460].temperature[1]
6.5 > 6
true
当索引改变时,它比较正常。
请帮帮我。我已经尝试了我所知道的一切并且迷失了想法。任何帮助将不胜感激。如果对我的问题有任何疑问,我会尽力及时解答。
由于您从文件中读取了 temperatures,因此您应该使用 Number
构造函数,因为您正在比较 strings
.
Number(data[1540].temperature[0]) > Number(data[460].temperature[1])
所以,我有 JS 代码,用于从服务器获取有关 2 个传感器温度的数据。数据包含在一个文本文件中,其中每行包含一个温度计的日期和 2 个值。我设法将这些数据分别解析为日期和值的数组。我可以找到每个数组的最小值和最大值,但是当我尝试从两个温度数组中获取最小值和最大值时,我得到了错误的数据。温度值存储在 data.temperature
中,这是一个包含 2 个值的数组,每个值对应一个温度计(data
是一个包含 属性 temperature
的对象数组,作为两个值的数组)。我使用了一个调试器,在比较两个明显错误的值时,代码在多个点上抛出错误 (19>6=false)。
代码如下:
extremes.minTempAbsolute = [0, 0];
for(var i = 1; i < data.length; i++){
for(var j = 0; j < data[i].temperature.length; j++){
if(data[i].temperature[j] < data[extremes.minTempAbsolute[0]].temperature[extremes.minTempAbsolute[1]]){
extremes.minTempAbsolute = [i, j];
}
}
}
extremes.maxTempAbsolute = [0, 0];
for(var i = 1; i < data.length; i++){
for(var j = 0; j < data[i].temperature.length; j++){
if(data[i].temperature[j] > data[extremes.maxTempAbsolute[0]].temperature[extremes.maxTempAbsolute[1]]){
extremes.maxTempAbsolute = [i, j];
}
}
}
对象 extremes
包含 data
数组中那些极值的索引。 minTempAbsolute
和 maxTempAbsolute
包含两个索引的数组 - 一个用于 data
,一个用于 temperature
。
在某一时刻,它正在比较 data[i].temperature[j] > data[extremes.maxTempAbsolute[0]].temperature[extremes.maxTempAbsolute[1]]
,其中 i
是 1540,j
是 0,maxTempAbsolute[0]
是 460,maxTempAbsolute[1]
是 1。因此:
data[1540].temperature[0] > data[460].temperature[1]
19 > 6
false
当我获取这些值并将它们记录到控制台时,它显示第一个值是 19,第二个值是 6,但它仍然无法正确比较它们(如上所示)。
我猜它也会以某种方式比较索引,因为:
data[1540].temperature[1] > data[460].temperature[1]
6.5 > 6
true
当索引改变时,它比较正常。
请帮帮我。我已经尝试了我所知道的一切并且迷失了想法。任何帮助将不胜感激。如果对我的问题有任何疑问,我会尽力及时解答。
由于您从文件中读取了 temperatures,因此您应该使用 Number
构造函数,因为您正在比较 strings
.
Number(data[1540].temperature[0]) > Number(data[460].temperature[1])