2017-06-10 1 views
0

Ich schreibe Code für Rekursion. Und hier ist mein Code.Javascript immer zurück in meinem Fall

Hier, was ich versuche zu tun ist, wenn String ' dann ersetzen Sie es mit HTML-Anführungszeichen und Aufruf der Funktion rekursiv, bis alle ' wurden ersetzt.

Aber das bringt mich immer falsch zurück. Wenn ich alarmiere var a. Wenn ich return false nicht verwende, dann gibt es undefined zurück. Irgendeine Ahnung, was ist hier falsch?

var a = replaceqt(" hello's there 'how are you?' "); 
 
console.log(a); 
 
function replaceqt(object) { 
 
    var indexc = object.indexOf("'"); 
 

 
    var next = object.charAt(indexc + 1); 
 
    var prev = object.charAt(indexc - 1); 
 
    if (indexc == 0) { 
 
    object = object.replace("'", "‘"); 
 
    } else if (parseInt(prev) >= parseInt(0) && parseInt(prev) <= parseInt(9)) { 
 
    object = object.replace("'", "&#39;"); 
 
    } else if (next == " ") { 
 
    object = object.replace("'", "&rsquo;"); 
 
    } else if (prev == " ") { 
 
    object = object.replace("'", "&lsquo;"); 
 
    } else { 
 
    object = object.replace("'", "&rsquo;"); 
 
    } 
 
    indexc = object.indexOf("'"); 
 
    if (indexc > -1) { 
 
    replaceqt(object); 
 
    return false; 
 
    } else { 
 
    return object; 
 
    } 
 
}

Antwort

2

Weil du falsch zurückgeben, wenn es ein zweiter Anruf. Sollte stattdessen das Ergebnis des rekursiven Aufrufs zurückgeben.

var a = replaceqt(" hello's there 'how are you?' "); 
 
console.log(a); 
 
function replaceqt(object) { 
 
    var indexc = object.indexOf("'"); 
 

 
    var next = object.charAt(indexc + 1); 
 
    var prev = object.charAt(indexc - 1); 
 
    if (indexc == 0) { 
 
    object = object.replace("'", "&lsquo;"); 
 
    } else if (parseInt(prev) >= parseInt(0) && parseInt(prev) <= parseInt(9)) { 
 
    object = object.replace("'", "&#39;"); 
 
    } else if (next == " ") { 
 
    object = object.replace("'", "&rsquo;"); 
 
    } else if (prev == " ") { 
 
    object = object.replace("'", "&lsquo;"); 
 
    } else { 
 
    object = object.replace("'", "&rsquo;"); 
 
    } 
 
    indexc = object.indexOf("'"); 
 
    if (indexc <= -1) { 
 
    return object; 
 
    } 
 
    return replaceqt(object); 
 
}

BTW brauchen Sie nicht parseInt(num) wenn num ein number sagen 0 oder 9.

1

Sie benötigen

if (indexc <= -1){ 
    return object; 
}else{ 
    replaceqt(object); return false; 
} 

mit

ersetzen

In Ihrem ursprünglichen Code wird der Rückgabewert replaceqt(object) verworfen, wenn indexc >= 0.

1

Sie sollten versuchen, .split und .join Funktionen zu verwenden, um Ihren Code zu vereinfachen.


Für eine einfache Fund ersetzen alle, können Sie dies tun:

var sentence = "I hate spaces." 
var charToFind = " "; 
var replacement = "-"; 

var afterSplit = sentence.split(charToFind) // ["I", "hate", "spaces"] 
var result = afterSplit.join(replacement) // "I-hate-spaces" 

Ihr Beispiel ist komplexer als ein Ersatz finden, weil Sie den Überblick über links halten müssen und richtige Zitate.

Um das zu umgehen, können wir herausfinden, ob es gerade oder ungerade mit dem Index im Array ist.

var someString = "My 'name' is 'Ryan'... I 'think'." 
 

 
function replaceQuotesFor (str) { 
 
    return str 
 
    .split("'") 
 
    .map(function (str, index) { 
 
     var quote = index % 2 === 1 
 
     ? '&lsquo;' 
 
     : '&rsquo;' 
 
     
 
     return (index === 0) 
 
     ? str 
 
     : quote + str 
 
    }) 
 
    .join('') 
 
} 
 

 
console.log('Before:', someString) 
 
console.log('After:', replaceQuotesFor(someString))


Ich hörte mit for Schleifen und Indizes ändern, weil es das Debuggen frustrierend gemacht.

Ich hoffe, diese Funktionen helfen, Ihren Code zu vereinfachen und Ihnen in der Zukunft zu helfen!

+1

danke Mann, ich habe einige komplexe Format hier, angenommen, wenn '' 'nach einer Zahl kommt, dann sollte es gleich bleiben. – hemsbhardiya

+0

Was wäre Ihre gewünschte Ausgabe für 'Ich mag die 'Nummer' '2''? – RyanNHG

+1

Sie können alle Möglichkeiten hier http://prntscr.com/fi3blg sehen – hemsbhardiya

Verwandte Themen