2017-10-16 82 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的伎俩

相关问题