JS 声称 656 < 7 是真的
JS claims that 656 < 7 is true
我有一个 json 结构数组:
{ data : [ { "num" : val , "time" : val } , ... ] }
我需要找到 num 和 min/max 时间的最大值,以及将对象移动到元组数组中:
[[time,num]...]
为了做到这一点,我使用了以下结构(这是一个成功的回调回调,输出是 json 字符串):
var json = $.parseJSON(output);
var xmin = json.data[0].time ;
var xmax = json.data[0].time ;
var ymax = json.data[0].num ;
var data = [];
//console.log(Math.max.apply(Math,json.data.num));
for( i = 0 ; i < json.data.length ; i++){
if( json.data[i].time < xmin){
xmin = json.data[i].time;
}
if( json.data[i].time > xmax){
xmax = json.data[i].time;
}
if( ymax < json.data[i].num ){
console.log(ymax + " " + json.data[i].num + "b " + (ymax > json.data[i].num) );
ymax = json.data[i].num ;
console.log(ymax + " " + json.data[i].num+ "a");
}
data.push([json.data[i].time,json.data[i].num]);
}
我知道最后 ymax 是 7,这个 logget 到控制台:
....
607 607a
607 646b true
646 646a
646 656b true
656 656a
656 7b true
7 7a
如您所见,它声称 656 < 7 是正确的。我不是异步专家,我们将不胜感激。
尝试与 intval 进行比较。您可能正在将字符串与整数进行比较。一个简单的 javascript:alert(656 <7);在 url 框中按预期显示 false。
确保在比较之前将字符串正确转换为数字:
var ymax = parseInt(json.data[0].num, 10);
....
var ycur = parseInt(json.data[i].num, 10);
if( ymax < ycur ){
console.log(ymax + " " + ycur + "b " + (ymax > ycur) );
ymax = ycur;
console.log(ymax + " " + ycur + "a");
}
如果您没有真正需要进行比较并且只对跟踪最大值感兴趣,您可以在循环中使用以下代码将其单行:
ymax = Math.max(ymax, parseInt(json.data[i].num, 10));
如前所述,您比较的是字符串而不是值。将字符串转换为整数的一个有用的快捷方式是 ~~
:
例如
var ymax = ~~json.data[0].num;
var ycur = ~~json.data[i].num;
if( ymax < ycur ){
...
}
~~
比 parseInt
更短更快。唯一的缺点是它仅限于典型的整数最大值(在实际情况下非常大)。
我有一个 json 结构数组:
{ data : [ { "num" : val , "time" : val } , ... ] }
我需要找到 num 和 min/max 时间的最大值,以及将对象移动到元组数组中:
[[time,num]...]
为了做到这一点,我使用了以下结构(这是一个成功的回调回调,输出是 json 字符串):
var json = $.parseJSON(output);
var xmin = json.data[0].time ;
var xmax = json.data[0].time ;
var ymax = json.data[0].num ;
var data = [];
//console.log(Math.max.apply(Math,json.data.num));
for( i = 0 ; i < json.data.length ; i++){
if( json.data[i].time < xmin){
xmin = json.data[i].time;
}
if( json.data[i].time > xmax){
xmax = json.data[i].time;
}
if( ymax < json.data[i].num ){
console.log(ymax + " " + json.data[i].num + "b " + (ymax > json.data[i].num) );
ymax = json.data[i].num ;
console.log(ymax + " " + json.data[i].num+ "a");
}
data.push([json.data[i].time,json.data[i].num]);
}
我知道最后 ymax 是 7,这个 logget 到控制台:
....
607 607a
607 646b true
646 646a
646 656b true
656 656a
656 7b true
7 7a
如您所见,它声称 656 < 7 是正确的。我不是异步专家,我们将不胜感激。
尝试与 intval 进行比较。您可能正在将字符串与整数进行比较。一个简单的 javascript:alert(656 <7);在 url 框中按预期显示 false。
确保在比较之前将字符串正确转换为数字:
var ymax = parseInt(json.data[0].num, 10);
....
var ycur = parseInt(json.data[i].num, 10);
if( ymax < ycur ){
console.log(ymax + " " + ycur + "b " + (ymax > ycur) );
ymax = ycur;
console.log(ymax + " " + ycur + "a");
}
如果您没有真正需要进行比较并且只对跟踪最大值感兴趣,您可以在循环中使用以下代码将其单行:
ymax = Math.max(ymax, parseInt(json.data[i].num, 10));
如前所述,您比较的是字符串而不是值。将字符串转换为整数的一个有用的快捷方式是 ~~
:
例如
var ymax = ~~json.data[0].num;
var ycur = ~~json.data[i].num;
if( ymax < ycur ){
...
}
~~
比 parseInt
更短更快。唯一的缺点是它仅限于典型的整数最大值(在实际情况下非常大)。