2017-10-16 2 views
0

das scheint einfach, aber ich habe immer noch Schwierigkeiten (ich bin relativ neu).JS - Funktion wiederholen bis Bedingung erfüllt

Ich habe eine Funktion replaceNextParameter(), die eine Zeichenfolge durchläuft und Text zwischen zwei Zeichenfolgen ersetzt, die ich notiere als sub1 und sub2. Eine Zeichenfolge kann 0, 1 oder viele sub1 und sub2 vorhanden sein. Ich möchte, dass es die Funktion replaceNextparameter ausführt, bis sub1 und sub2 nicht mehr vorhanden sind und das Ergebnis zurückgibt.

Hier ist meinen Code:

function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) { 
    newString = string 
    if (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) { 
     newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray); 
    } 
    return newString 
}; 

Hier ist ein Live-Beispiel von dem, was sie tun sollten.

//data: 
const paramsArray = [ 
    {param: "company", input: "COMPANY"}, 
    {param: "url", input: "URL"}, 
] 
const sampleMessage = "BlaBlaBla {{company}} and {{url}}" 

findAllParametersInString(sampleMessage,'{{', '}}', paramsArray); 
//Should return "BlaBlaBla COMPANY and URL" 

Irgendeine Idee, wie man es repariert? Derzeit ist nur gibt sie "BlaBlaBla COMPANY and {{url}}"

Lösung:

function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) { 
    newString = string 
    while (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) { 
     newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray); 
    } 
    return newString 
}; 
+2

Schauen Sie sich mit einer 'while' Schleife an. Die grundlegende Beschreibung Ihrer Logik ist "solange die Bedingung wahr ist, tun Sie etwas", was genau die Art von Problem ist, für die eine "while" -Schleife entworfen wurde. Rekursion ist auch eine Option, aber ist weit weniger effizient und nicht annähernd so lesbar. –

+0

Vielen Dank @Flemming, ich habe es untersucht, aber ich bin mir nicht sicher, wie es die Funktion wiederholen UND jedes Mal das neue Ergebnis zurückgeben soll, irgendwelche Ideen? –

+0

Ich bin ein Idiot, ich habe es einfach nicht richtig benutzt, 'während' funktioniert! –

Antwort

1

Ich schlage vor, Sie param Wert als Schlüssel zu verwenden, und Ihren input Wert als Wert in einem einzigen Objekt. Wie folgt aus:

var params = { 
    company: "COMPANY", 
    url: "URL" 
}; 

und jetzt diese einfache Funktion:

var sampleMessage = "BlaBlaBla {{company}} and {{url}}"; 

function replace(str, map) { 
    for (var key in map) { 
     str = str.split('{{' + key + '}}').join(map[key]); 
    } 
    return str; 
} 

replace(sampleMessage, params); // -> "BlaBlaBla COMPANY and URL" 

Sie Parameter für {{ und }} in replace Funktion können

+0

Hallo Andrea, ich schätze die Antwort, aber meine Absichten sind komplizierter als das gezeigte Beispiel. Die Werte sind irrelevant, danke für die Bemerkung tho! Wenn es so einfach war (oder die Sache, die ich tat, hatte nicht mehr "Zeichenfolgen") stimme ich völlig mit Ihren Methoden überein. –

0
function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) { 
    newString = string 
    while (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) { 
     newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray); 
    } 
    return newString 
}; 

hat den Trick basiert weg von @Flemming

Verwandte Themen