Javascript循环替换字符串中的数据

Javascript循环替换字符串中的数据,javascript,Javascript,我有一小段代码,我正在尝试替换它。有两个数据对象。一个是包含{variable}的URL列表,另一个是这些变量的替换值的对象 我已经创建了一些代码来尝试让它工作,但我认为可能有一种更有效的方法来处理这个问题 // Content we will look through and replace variables in let urls = [ 'http://www.example.com/{var1}/{var2}', 'http://www.example.com/{var

我有一小段代码,我正在尝试替换它。有两个数据对象。一个是包含{variable}的URL列表,另一个是这些变量的替换值的对象

我已经创建了一些代码来尝试让它工作,但我认为可能有一种更有效的方法来处理这个问题

// Content we will look through and replace variables in
let urls = [
    'http://www.example.com/{var1}/{var2}',
    'http://www.example.com/{var1}/{var4}',
];

// Data used for the replacement
let variables = [{
    variable: 'var1',
    value: '123'
},
{
    variable: 'var2',
    value: '456'
},
{
    variable: 'var4',
    value: '789'
}]

// Will hold the final URLs
let finalURLs = [];

// Loop over all URLS
for (let index = 0; index < urls.length; ++index) {

    // Loop over all variables
    for (let d = 0; d < data.length; ++d) {

        // Set the replaced URL
        let u = urls[index].replace('{' + data[d].variable + '}', data[d].value);
        finalURLs.push(u);

    }

}

// Desired output
finalURLs = [
    'http://www.example.com/123/456',
    'http://www.example.com/123/789'
]
我确信我在这方面做得很差,但我正在寻找一些关于如何做的建议。

您可以使用,并且。使用正则表达式全局应用替换

常量URL=[ 'http://www.example.com/{var1}/{var2}', 'http://www.example.com/{var1}/{var4}', ]; 常量变量=[ {变量:“var1”,值:“123'}, {变量:“var2”,值:“456'}, {变量:'var4',值:'789'} ]; const result=url.mapurl=>{ variables.forEach{variable,value}=>{ url=url.replacenew RegExp`{${variable}}`,'g',value; }; 返回url; };
console.logresult 您继续替换URL[index]的原始值,而不是先前替换的值

for (let index = 0; index < urls.length; ++index) {
    let cur_url = urls[index];
    // Loop over all variables
    for (let d = 0; d < data.length; ++d) {
        // Set the replaced URL
        cur_url = cur_url.replace('{' + data[d].variable + '}', data[d].value);   
    }
    finalURLs.push(cur_url);
}

您可以将一个对象作为替换字符串并替换所有找到的值

var url=['http://www.example.com/{var1}/{var2}','http://www.example.com/{var1}/{var4}'], vars={var1:'123',var2:'456',var4:'789'}, result=url.maps=>s.replace/\{[^}]*?\}/g,\ uv=>v在vars中?vars[v]:v;
console.logresult 一种方法是使用正则表达式匹配括号中的每个变量,然后在按变量索引的对象中查找替换项,其值为替换项:

//我们将浏览并替换中的变量的内容 让URL=[ 'http://www.example.com/{var1}/{var2}', 'http://www.example.com/{var1}/{var4}', ]; //用于替换的数据 设变量=[{ 变量:“var1”, 值:“123” }, { 变量:“var2”, 值:“456” }, { 变量:“var4”, 值:“789” }]; const replacements=variables.reducea,{variable,value}=>{ a[变量]=值; 返回a; }, {}; constpattern=newregexp Object.keysreplacements.MapPinele=>`{${Pinele}}}`。加入“|”, 'g'//全局匹配;全部替换 ; const newurl=url.mapurl=> url.replacepattern,不带括号=>{ //修剪前支架和后支架: 常量针=NeedWithBrands.slice1,NeedWithBrands.length-1; 返回替换[针]; } ;
console.lognewurl 这似乎可以用一个简单的方法解决

我希望我了解你的确切情况


另一个注意事项是,如果变量可能包含特殊字符,则应使用

What is data(数据是什么?)我认为它应该是变量,但这几乎就是实现这一点的方法。编写代码总是有多种方法,但是有两个数组需要交互,所以需要两个嵌套循环。这没什么问题。这是怎么做的?对于2个输入URL,使用该代码可以得到6个输出URL@Amunium@JaromandaX-是的,他不小心用了数据而不是变量。这里有一些问题,但问题是效率,实际上没有什么可以改进的。他需要两个嵌套循环,不管他使用for循环还是map/forEach。从概念上讲,这没什么问题,他只需要消除bug;我不明白你的替换方法的第二个参数是什么?以下划线作为参数的函数,该函数从未使用过。。。什么?你需要一个参数占位符。\u是一个常用符号,表示未使用此参数。根据MDN,如果函数在replace方法中作为参数传递,则该函数的第一个参数为matched string,第二个参数为第n个matched元素,在这种情况下,下划线为matched string{var},v为相同的东西,但没有括号,你能给我解释一下吗?是的,但我只需要卷发里面的一部分,不需要整条。
const variables = { var1: '123', var2: '323', var4:'254'}

const finalUrls = [
   `http://www.example.com/${variables.var1}/{variables.var2}`,
   `http://www.example.com/${variables.var1}/{variables.var4}`
]