JS - 重复功能直到满足条件

时间:2017-10-16 19:49:42

标签: javascript function

这似乎很简单,但我仍然遇到困难(我比较新)。

我有一个函数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
};

3 个答案:

答案 0 :(得分: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的参数

答案 1 :(得分:1)

虽然晚了,但我希望这种解决方案可能适合某人。
我认为最好的解决方案是使用正则表达式,因为它是您要处理的字符串。

尽管我不确定parameterAndInputArray的用途。
所以我会用这个(尽管可以创建更好的正则表达式):

let newstring = oldstring.replace(/sub1/gi,replacement1).replace(/sub2/gi,replacement2)

如果要删除replacement[1/2],其中'@'是要替换的字符,例如(''或空引号(sub[1/2])。

答案 2 :(得分: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