JS声称656< 7是真的

时间:2015-01-05 16:57:11

标签: javascript jquery json

我有一个结构的json数组:

 { data : [ { "num" : val , "time" : val } , ... ] }

我需要找到num的最大值,最小/最大时间,以及将对象移动到元组数组中:

 [[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&lt; 7是真的。我不是异步大师,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:5)

确保在比较之前将字符串正确转换为数字:

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));

答案 1 :(得分:2)

尝试与intval进行比较。您可以将字符串与整数进行比较。一个简单的javascript:alert(656&lt; 7);在网址框中显示为预期的错误。

答案 2 :(得分:0)

如上所述,您正在比较字符串而不是值。将字符串转换为整数的有用快捷方式是~~

e.g。

var ymax = ~~json.data[0].num;
var ycur = ~~json.data[i].num;
if(  ymax < ycur  ){
    ...
}

~~parseInt更短,更快。唯一的缺点是它仅限于典型的整数最大值(在实际情况下非常大)。