2016-10-21 5 views
0

Zusammenfassung:
Ich habe einen Code, die Worte aus einer Datenbank nimmt, ist es alles in einer Box setzt die 3 x 3 Textfelder hat (Sie können auch stattdessen erweitern von 3 Kisten, die ich bestätigt habe gearbeitet).

In den Feldern nimmt es die Höhe der Wörter und setzt diese Höhe auf die Höhe des div, der die Wörter enthält, und platziert diese Höhe innerhalb eines Arrays. Wenn ein div nicht vorhanden ist (kein Text), wird 0 gesetzt.
Jedes mal wenn es das tut, was 1 Reihe ist, wird es die Höhe der drei in der Reihe überprüfen, und das div über ihnen als setzen die größte Höhe, etwa so:Warum ist eine größere Variable weniger als eine kleinere Variable

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 

Nun wird die Art und Weise meiner Seite ist, wird Temp sein:

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 

das Problem:
wenn der Code Id bekommt [Ten] ist 1, Es beginnt mit der Aussage:
"284 ist größer als 0"
, die geplant ist, dann erhalte ich:
"284 284"
die auch geplant ist, dann:
"50 größer als 284"
Hier ist das Problem: was kam danach das ist, was sollte übersprungen werden:
"50 50"
Das sagt mir, dass die if-Anweisung, die ich True überschritten habe, sah es 284 < 50. Ich habe Mathe mindestens mehr als einmal in meinem Leben getan, und Ich weiß, dass 284 eine größere Zahl als 50 ist. Aus diesem Grund hat meine Box eine geringere Höhe als der darin enthaltene Text und sie überschneiden sich auf eine Weise, die hässlicher ist als ich. Ich bin mir sicher, dass mein Code und ich eine Art Midlife-Crisis haben und wäre großartig, wenn mir jemand erklären könnte, warum mein Code diese rebellische Phase durchläuft.

+4

'50 <284' aber "50"> "284" '(genau wie' "be"> "ape" ') – apsillers

+0

Beim Vergleichen von Zeichenfolgen, die nur Buchstaben enthalten, würden Sie nicht überrascht sein, dass" Zoo ">" A pple ". Die gleichen "alphabetischen" Regeln gelten für Strings, die Zahlen enthalten. – Jecoms

Antwort

1

Dies wird verursacht, weil Sie String zu String vergleichen, beim Vergleich von String js nur Ihre alphabetische Reihenfolge überprüfen.

Sie müssen parseInt in Ihren Variablen verwenden.

Dies ist der Test, den ich in der Chrom-Konsole gemacht habe.

var test1 = 50 
var test2 = 200; 

test1 > test2 
false 

-------- 

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

test1 > test2 
true 

parseInt(test1) > parseInt(test2) 
false 
+0

Kann ich jetzt tatsächlich sterben, ich verbrachte 6 Stunden damit, eine so einfache Lösung zu bekommen. – Naginipython

-1

In Javascript ist alles ein Objekt.Es hat keinen Typ Es bestimmt den Typ durch die Art, wie wir es erklären Hier vergleichen Sie (tempN < temp [ix]) tempN und temp [ix] beide sind Strings müssen Sie sie in Zahlen konvertieren und dann vergleichen

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

Wenn Sie Array von Zahlen umwandeln möchten sortiert werden, aber nicht alphabetisch können Sie so etwas wie dieses

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

Hoffnung tun dies hilft

0

Ihr Code vergleicht Strings (in alphabetischer Reihenfolge):

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

Sie müssen Zahlen vergleichen, indem so etwas wie parseInt mit:

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>

Verwandte Themen