为什么较大的变量小于较小的变量

时间:2016-10-21 16:34:56

标签: javascript arrays loops if-statement

要点:
我有一个从数据库中获取单词的代码,它将所有内容放在一个有3个3个文本框的框中(你也可以扩展而不是使用3个框,我确认它有效)。

在框内,它采用单词的高度,并将高度设置为包含单词的div的高度,然后将该高度放在数组内。如果没有div(没有文本),则放置一个0。

每隔3次执行此操作,即1行,它将检查行中三个的高度,并将div上方的div设置为最大高度,如下所示:

    var tempN = 0; //Holds each number temporarily
    var temp = []; //Holds all 9 box heights

    for (var i = 0; i < Panels.length; i++) { //There are 9 panels
        temp[i] = new Array(); //adding to array
        if (document.getElementById('Column'+i+Id[Ten])!=null) {//Id[Ten] will be 3, 2, and 1, in a for loop
            document.getElementById('Column'+i+Id[Ten]).style.height = document.getElementById('Text'+i+Id[Ten]).clientHeight+"px";
            temp[i].push(document.getElementById('Column'+i+Id[Ten]).clientHeight); //puts number on table
        } else {
            temp[i].push(0); //since there is no panel, the height would be 0
        }

        if (i%3 == 2) { //every 3rd time
            for (var x=2;x >= 0;x--) { //also could do (var x=0;x<3;x++)
                alert(temp[i-x]+" is greater than "+tempN); //tells me what should work
                if (tempN < temp[i-x]) { //also could do the other way around
                    tempN = temp[i-x]; //tempN will be the current biggest height
                    alert(tempN+' '+temp[i-x]); //just a show it went through if
                    document.getElementById('Row'+BoxRow+Id[Ten]).style.height = tempN + "px";
                }
            }
            tempN = 0; //reset tempN for next 3 boxes
        }
    }
    temp = []; //reset temp for next box

现在,我的页面的方式是,temp:

temp = [0,158,0,0,158,0,0,50,0] when Id[Ten] is 3
temp = [0,50,0,0,0,0,0,0,0] when Id[Ten] is 2
temp = [284,50,50,50,50,50] when Id[Ten] is 1

问题:
当我的代码到达Id [Ten]为1时,它将首先说:
“284大于0”
这是有计划的,然后我得到:
“284 284”
这也是有计划的,然后:
“50大于284”
问题出现了:之后发生了什么应该被跳过:
“50 50”
这告诉我if语句一旦看到284&lt; 50.我一生中至少做过不止一次的数学运算,而且我知道284的数字比50更大。因此,我的盒子的高度比文本中的高,它们的重叠方式比我。我确信我的代码和我正处于某种中年危机中,如果有人可以向我解释为什么我的代码会经历这个反叛的阶段,那就太棒了。

3 个答案:

答案 0 :(得分:1)

这是因为你在比较字符串和字符串,比较字符串js只验证你的字母顺序。

您必须在变量中使用parseInt。

这是我在chrome控制台中所做的测试。

var test1 = 50
var test2 = 200;

test1 > test2
false

--------

var test1 = "50"
var test2 = "200";

test1 > test2
true

parseInt(test1) > parseInt(test2)
false

答案 1 :(得分:0)

您的代码正在比较字符串(字母顺序):

"Zoo" > "Apple" // true
"50" > "284" // true

你需要使用像parseInt这样的东西来比较数字:

parseInt("50") > parseInt("284"); // false

var stringResult = "50" > "284"; // true
var intResult = parseInt("50") > parseInt("284"); // false

document.getElementById('strings').textContent = stringResult;
document.getElementById('ints').textContent = intResult;
<h3>Result of "50" > "284" = 
  <span id="strings"></span>
</h3>



<h3>
  Result of parseInt("50") > parseInt("284") =
  <span id="ints"></span>
</h3>

答案 2 :(得分:-1)

在javascript中,一切都是对象。它没有任何类型 它按我们声明的方式确定类型 在这里你要比较(tempN&lt; temp [i-x]) tempN和temp [i-x]都是字符串 你必须将它们转换为数字,然后进行比较

   var number1=parseInt(tempN,10);
    var number2=parseInt(temp[i-x],10);
     console.log(number1<number2);

如果您想要转换数字数组以进行排序但不按字母顺序排列,您可以执行类似这样的操作

var numbers=[1,90,5,8];
numbers.sort(SortCompare);
function SortCompare(a,b){
return a-b;
}

希望这有帮助