2017-10-16 76 views
0

這似乎很簡單,但我仍然有困難(我相對較新)。JS - 有功能重複,直到條件滿足

我有一個函數replaceNextParameter()它通過一個字符串,並替換兩個字符串之間的文本,我通知sub1sub2。字符串可能有0,1或多個sub1sub2。我希望它執行功能replaceNextparameter,直到不再有sub1sub2存在並返回結果。

這裏是我的代碼

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 
}; 

這裏是它應該做的活例子

//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" 

任何想法如何解決它?目前它只返回"BlaBlaBla COMPANY and {{url}}"

解決方案:

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

使用'while'循環進行研究。你的邏輯的基本描述是「條件成立時,做一些事情」,這正是'while'循環所設計的問題。遞歸也是一種選擇,但效率低得多,而且幾乎不可讀。 –

+0

謝謝@Flemming,我確實研究過它,但我不確定如何讓它重複該功能並每次都返回新結果,有什麼想法? –

+0

我是個白癡,我只是沒有正確地使用它,'while'工作! –

回答

1

我建議你用你的param值作爲密鑰,並且input值作爲一個單獨的對象值。就像這樣:

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

,現在使用這個簡單的功能:

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" 

您可以使用參數{{}}replace功能

+0

你好,安德烈,我很欣賞這個答案,但是我的意圖比所示的例子更復雜。價值無關,謝謝你的評論!如果這是簡單的(或者我所做的事情沒有更多的「附加字符串」,我完全同意你的方法。 –

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 
}; 

基於有沒有斷@Flemming的伎倆

相關問題