用数组元素替换字符串

3
let string = 'My name is [~FIRSTNAME] [~LASTNAME]';
let nameArray = ['Peter', 'Parker'];
let patternToBeReplaced = ['[~FIRSTNAME]', '[~LASTNAME]']

我希望用namearray中的元素替换string,使得字符串变成'我的名字是Peter Parker'

以下是我解决这个问题的方法 -

patternToBeReplaced.forEach(function (match, index) {
        var output = string.replace(match, nameArray[index]);
});

但是这并没有按照预期工作。


2
你需要更新字符串变量... 但是let具有块级作用域... 因此请改用箭头函数。 - Pranav C Balan
是的,string = string.replace(... - James
尝试使用reduce代替forEach - Bergi
7个回答

5
你可以使用 Array#reduce 并使用该字符串进行下一次替换。

let string = 'My name is [~FIRSTNAME] [~LASTNAME]';
let nameArray = ['Peter', 'Parker'];
let patternToBeReplaced = ['[~FIRSTNAME]', '[~LASTNAME]']

string = patternToBeReplaced.reduce((s, m, i) => s.replace(m, nameArray[i]), string);

console.log(string);


2

您正在创建一个字符串模板系统。由于您已经使用了ECAMScript 6语法,因此可以使用新的内置模板文字。

let [FIRSTNAME, LASTNAME] = ['Peter', 'Parker'];
let string = `My name is ${FIRSTNAME} ${LASTNAME}`;

console.log(string);

这也可以更干净地工作,当有多个插入点在字符串中时。

let [FIRSTNAME, LASTNAME] = ['Peter', 'Parker'];
let string = `My name is ${LASTNAME}... ${FIRSTNAME} ${LASTNAME}`;

console.log(string);


1
patternToBeReplaced.forEach(function (match, index) {
    string = string.replace(match, nameArray[index]);
});

0

类似这样的东西。

let str = 'My name is [~FIRSTNAME] [~LASTNAME]';
let nameArray = ['Peter', 'Parker'];
let patternToBeReplaced = ['[~FIRSTNAME]', '[~LASTNAME]']


const result = patternToBeReplaced.reduce((str, placeholder, i) => {
return str.replace(placeholder, nameArray[i]);
}, str);
console.log(result);


0
  1. output 是一个局部变量,仅仅声明它是没有用的。
  2. replace(String, String) 只会替换第一个匹配的模式。

这是我的解决方案:

let replaceWithArrayElements = (patterns, replacements, targetString) => {
    patterns.forEach((pattern, i) => targetString = targetString.replace(new RegExp(pattern, 'g')));
    return targetString;
}

0

第一种解决方案,保留您的基础代码:

let string = 'My name is [~FIRSTNAME] [~LASTNAME]';
let nameArray = ['Peter', 'Parker'];
let patternToBeReplaced = ['[~FIRSTNAME]', '[~LASTNAME]'];
patternToBeReplaced
.forEach((match, i)=>{
  string = string
           .replace(match, nameArray[i]);
});

使用 Map
let string = 'My name is [~FIRSTNAME] [~LASTNAME]';
let replaceMap = new Map();
replaceMap.set('[~FIRSTNAME]', 'Peter');
replaceMap.set('[~LASTNAME]', 'Parker');
replaceMap.forEach((key, value)=>{
  string = string.replace(key, value);
});

使用ES6的“模板”字符串:
/*
*Have some ways of getting the first name in "firstName"
*Have some ways of getting the last name in "lastName"
*/
let string = `My name is ${firstName} ${lastName}`;

0
string.match(/\[~\w+\]/g).forEach((item,index)=>{
  string = string.replace(item, nameArray [index])
})

您可以根据您的需求使用上述代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接