2016-12-04 5 views
0

Ich versuche, eine angegebene Zeichenfolge, die in einzelne Zeichen aufgeteilt wurde durchlaufen und dann lesen Sie zurück Ticker-Band-Stil. Ich habe eine Funktion in einem setInterval, die einen Wortzähler inkrementieren soll, aber ich habe Schwierigkeiten, dies zu funktionieren, da ich den Zähler (eine ganze Zahl) nicht per Referenz in die Funktion senden kann. Ich habe die verschiedenen Seiten auf dieser Seite gelesen und andere über Pass-by-Value vs Pass-by-Referenz und ich kann es immer noch nicht zum Laufen bringen. Kann jemand helfen? Meine neueste Inkarnation ist unten - und es funktioniert nicht :(Looping durch ein Array mit Pass durch Verweis auf eine Funktion in Javascript

<!DOCTYPE html> 
<html> 
<body> 

<span id="demo"></span> 

<script> 
myFunction(); 

function myFunction() 
{ 
    var str = "How are you/doing today?"; 
    var res = str.split(""); // we now have an array of individual letters 
    // The "/" is intended to be a line break 

    var counter = { value: 0 }; // keeps track of where we are 

    myvar = setInterval(appendText, 250, res, counter); // Run every 250ms 
    if(counter.value > res.length) clearInterval(myVar); // when we read the end of the character array, stop the read out. 
} 

function appendText(res, c) 
{ 
    var addtext; 
    if (res[c.value] =="/") 
    { 
     addtext="<br/>"; 
    } 
    else 
    { 
     addtext = res[c.value]; 
    } 
    document.getElementById("demo").innerHTML+=addtext; 
    c.value++; // c is a counter that keeps track of where we are in the text string 
} 
</script> 

</body> 
</html> 
+4

Wenn 'c' ein Objekt ist, dann zugreifen, was is'res [c] 'sollen? Hast du vor, 'res [c.value]' zu schreiben? – UnholySheep

+3

Sie vergleichen "counter" auch mit "res.length" anstatt "counter.value". – CollinD

+0

Ah, danke für diese Kommentare, ich habe den Code entsprechend angepasst und es funktioniert besser, auch wenn ich jetzt die Ausgabe über das Ende des Zeichenarrays hinaus habe, oh Schatz! – user3713442

Antwort

1

Kommentare Nach von @UnholySheep und @ user3713422, einschließlich Erklärung myvar außerhalb Umfang myFunction, Entfernen Bezug auf undefinierte myVar

<!DOCTYPE html> 
 
<html> 
 

 
<body> 
 

 
    <span id="demo"></span> 
 

 
    <script> 
 
    myFunction(); 
 
    var myvar; 
 

 
    function myFunction() { 
 
     var str = "How are you/doing today?"; 
 
     var res = str.split(""); // we now have an array of individual letters 
 
     // The "/" is intended to be a line break 
 

 
     var counter = { 
 
     value: 0 
 
     }; // keeps track of where we are 
 

 
     myvar = setInterval(appendText, 250, res, counter); // Run every 250ms 
 

 
    } 
 

 
    function appendText(res, c) { 
 
     var addtext; 
 

 
     if (res[c.value] == "/") { 
 
     addtext = "<br/>"; 
 
     } else { 
 
     addtext = res[c.value]; 
 
     } 
 

 
     document.getElementById("demo").innerHTML += addtext; 
 
     c.value++; // c is a counter that keeps track of where we are in the text string 
 
     // when we read the end of the character array, stop the read out. 
 
     console.log(c.value, res.length); 
 
     if (c.value === res.length) clearInterval(myvar); 
 
    } 
 
    </script> 
 

 
</body> 
 

 
</html>

0

Sie können die Zeichenfolge direkt verwenden, becaus es eine Länge Eigenschaft hat, auch. Und ein Zeichen ist leicht wit h ein Index.

function myFunction() { 
 
    var res = "How are you/doing today?", 
 
     counter = { value: 0 }; 
 

 
    myInterval = setInterval(appendText, 250, res, counter); 
 
} 
 

 
function appendText(res, c) { 
 
    document.getElementById("demo").innerHTML += res[c.value] == "/" ? "<br/>" : res[c.value]; 
 
    c.value++; 
 
    if (c.value === res.length) clearInterval(myInterval); 
 
} 
 

 
var myVar; 
 
myFunction();
<span id="demo"></span>