2016-04-17 10 views
1

Es tut mir leid für die dumme Frage. Ich habe das schon seit Stunden versucht, und ich kann es wirklich nicht zum Laufen bringen. Also habe ich eine for-Schleife, die einige Zahlen durchläuft.
Aber es nimmt nicht den ersten Wert (71990000).JS for-loop wie man den ersten Wert bekommt

Wie kann dies erreicht werden?
Dies ist, was ich bisher habe:

71991010 
71991111 
71991212 
71991313 

Aber ich brauche auch die Anzahl: 71990000
Wie kann ich das tun dies

 var minNr = 0000; 
     var maxNr = 10000; 
     var prefix = 7199; 

     function Nummer(min,max) 
     { 
      var regex = /^(\d{2})\1$/; 

      var guld_nr; 
      for(guld_nr = minNr; guld_nr < maxNr;) 
      { 
       if(regex.test(guld_nr)) 
       { 
        $(".resultat").append(prefix + "" + guld_nr + "<br>"); 
       } 

       guld_nr++; 
      } 

     } 

Der Ausgang?

Antwort

0

Es ist, weil Ihr regex die Zahl 0 ablehnt; das erste Mal durch die Schleife, minNr hat den numerischen Wert 0 (Einstellung auf 0000 hilft nicht; es ist nur eine schicke Art zu sagen 0). Die Regex erwartet zwei Ziffern gefolgt von dem gleichen Muster, aber was Sie geben, ist die Zeichenfolge '0'.

Sie könnten minNr setzen einen String statt auf dem ersten Durchgang durch ('0000') zu sein, und das wird das Problem für ‚0000‘ lösen, aber Sie werden verpassen ‚0101‘, ‚0202‘ usw. (was konvertieren in die Zeichenfolgen '101', '202' usw.

Eine Lösung wäre, die Zeichenfolgendarstellung der Zahl auf Null zu setzen.Die folgende Funktion wird eine beliebige Zahl nehmen und links Null-Pad es eine vorgegebene Breite zu passen:

function zeropad(n, w) { 
    n = String(n); 
    while(n.length < w) n = '0' + n; 
    return n; 
} 

Sie können es verwenden minNr für die regex zu konvertieren:

regex.test(zeropad(guld_nr, 4)) 

Beachten Sie auch, dass Number ist eine integrierte -in Objektwrapper für Literale in JavaScript (alle Grundelemente haben Objektwrapper: Number,, String), und durch Erstellen einer Funktion namens Number verschließen Sie dieses integrierte Objekt, das nicht empfohlen wird (Code, der verwendet werden muss es ruft deine Funktion ins auf tead, das ist inkompatibel und hat einen anderen Zweck).

+0

Ich habe gerade Ihre Lösung versucht, und es funktioniert mehr oder weniger. Altho ich bekomme die Ausgabe: 71990, 7199101, 7199202, was bedeutet, dass ich eine Null in der Vorderseite der Nummer fehlt. Wie es sein sollte 71990101. – Th3Moron

+0

Sie müssen die 'Zeropad'-Funktion verwenden _wherever_ Sie konvertieren die Zahl in die Zeichenfolge und Sie müssen es mit Nullen aufgefüllt. In meiner Antwort habe ich versucht, das Verständnis für das Thema anzugehen; Diese Zahlen sind keine Zeichenfolgen. Sie können in eine _string-Darstellung_ konvertiert werden, die normalerweise keine links aufgefüllten Nullen enthält. –

0

Verwenden string:

var minNr = '0000'; 

Es ist der Startwert für die regex Test, und Sie müssen die vier Nullen dafür. Wenn es eine Zahl wäre, dann erhält man nur eine Null zum Testen. es würde helfen, wenn Sie es mit führenden Nullen auffüllen.

var minNr = '0000', 
 
    maxNr = 10000, 
 
    prefix = 7199; 
 

 
function Nummer(min,max)  { 
 
    var regex = /^(\d{2})\1$/; 
 

 
    var guld_nr; 
 
    for(guld_nr = minNr; guld_nr < maxNr;guld_nr++)   { 
 
     if(regex.test(guld_nr))    { 
 
      document.write(prefix + "" + guld_nr + "<br>"); 
 
     }     
 
    } 
 
} 
 

 
Nummer(minNr, maxNr);

+0

Dank! Das hat den Job gemacht! Kannst du mir sagen, warum ich die Null als eine Saite brauche? Ich würde gerne wissen, für eine andere Zeit – Th3Moron

+0

ist es der Startwert für den Regex-Test, und Sie brauchen die vier Nullen dafür. Wenn es eine Zahl wäre, dann erhält man nur eine Null zum Testen. es würde helfen, wenn Sie es mit führenden Nullen auffüllen. –

0

Zahlen nicht Null-Pad selbst; 0000; // 0
Erstellen Sie eine benutzerdefinierte Null-Pad-Methode für sie, so dass Sie zpad(0, 4); // "0000"

function zpad(x, digits) { 
    var pad = '0'; 
    x = x.toString(); 
    digits -= x.length; 
    while (digits > 0) { 
     if (digits & 1) x = pad + x; 
     pad += pad; 
     digits >>>= 1; 
    } 
    return x; 
} 

Jetzt Nummer entsprechend

function Nummer(min, max, prefix) { 
    var regex = /^(\d{2})\1$/, 
     i, str; 
    prefix = prefix || ''; 

    for(i = min; i < max; ++i) { 
     str = zpad(i, 4); 
     if(regex.test(str)) console.log(prefix + str); 
    } 
} 

und

Nummer(minNr, maxNr, '7199'); 

Randnotiz verwenden anpassen tun können

  • Nummer nicht Konstruieren ein Objekt, betrachtet Kamel es
  • Gehäuse
0

Sie Arithmetik verwenden könnten die Ziffer Musterprüfung und halten das Ergebnis numerisch zu tun:

var minNr = 0; // it does not help to put 4 zeroes here. 
 
var maxNr = 10000; 
 
var prefix = 7199; 
 

 
function Nummer(min,max) { 
 
    for (var guld_nr = min; guld_nr < max; guld_nr++) { 
 
     if (Math.floor(guld_nr/100) === guld_nr % 100) { 
 
      $(".resultat").append((prefix * 10000 + guld_nr) + "<br>"); 
 
     } 
 
    } 
 
} 
 

 
Nummer(minNr, maxNr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="resultat"></div>

Das Problem mit Ihrem Code, wenn die niedrigeren Zahlen gegen den regulären Ausdruck geprüft Sie werden implizit in eine Zeichenfolge konvertiert und erhalten keine vorangestellten Nullen, so dass sie im regulären Ausdruck fehlschlagen.

Wie auch immer, der Code wird effizienter sein, wenn man an Zahlen statt Strings festhält, also würde ich empfehlen, mit Zahlen bis zu dem Punkt zu arbeiten, an dem sie im Browser ausgegeben werden.

Noch effizienter ist dieser Code:

var minNr = 0; // it does not help to put 4 zeroes here. 
 
var maxNr = 10000; 
 
var prefix = 7199; 
 

 
function Nummer(min,max) { 
 
    var test = Math.floor(min/100)*100 + Math.floor(min/100)%100; 
 
    var guld_nr = test < min ? test + 101 : test; 
 
    for (; guld_nr < max; guld_nr+=101) { 
 
     $(".resultat").append((prefix * 10000 + guld_nr) + "<br>"); 
 
    } 
 
} 
 

 
Nummer(minNr, maxNr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="resultat"></div>

+0

Danke, also gibt es keinen Grund, Regex zu verwenden, und immer noch die 0000, 0101, 0202 usw.? – Th3Moron

+1

Es gibt, aber das wurde in einigen der anderen Antworten behandelt. Ich wollte mich auf Effizienz konzentrieren. Regex zwingt Sie, Zeichenfolgen zu verwenden, und die Ausführung von Umwandlung + Regex ist teuer in Bezug auf die Ausführungszeit. Ich habe gerade eine weitere Version des Codes hinzugefügt, die jeweils 101 gleichzeitig hochgeht. Keine Notwendigkeit mehr, etwas zu finden. – trincot

Verwandte Themen