Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历数组并编辑字符串_Javascript - Fatal编程技术网

Javascript 循环遍历数组并编辑字符串

Javascript 循环遍历数组并编辑字符串,javascript,Javascript,我有一个变量: WelcomeText = 'Hi $0! Welcome to $1!'; 我正在尝试创建这个函数: translate(WelcomeText, 'Daniel', 'Budapest'); 应返回以下内容: 'Hi Daniel! Welcome to Budapest!' 我已尝试使此函数支持无限参数,以替换: export const translator = (str, ...args) => { let translate = args.map((i

我有一个变量:

WelcomeText = 'Hi $0! Welcome to $1!';
我正在尝试创建这个函数:

translate(WelcomeText, 'Daniel', 'Budapest');
应返回以下内容:

'Hi Daniel! Welcome to Budapest!'
我已尝试使此函数支持无限参数,以替换:

export const translator = (str, ...args) => {
  let translate = args.map((item, index) => {
    let stringToReplace = '$' + index;
    let result = str.replace(stringToReplace, item);
    return result;
  });

  console.log(translate);
};
但这给了我:

["Hi Daniel! Welcome to $1", "Hi $0! Welcome to Budapest"]
除此之外,我不知道该如何解释,但我无法用语言表达,因此我希望你能理解我的上述问题:)


我在这里做错了什么?我需要做什么才能达到我想要的结果?

您只需使用forEach即可

让WelcomeText='Hi$0!欢迎来到$1;
常量转换器=(str,…args)=>{
args.forEach((项目,索引)=>{
设stringToReplace='$'+索引;
str=str.replace(stringToReplace,项目);
});
console.log(str);
};

翻译(WelcomeText,“丹尼尔”,“布达佩斯”)您可以将函数作为替换参数并搜索字符串的索引

const
translate=(string,…items)=>string.replace(/\$(\d+)/g,(\u,i)=>items[i]),
text='你好,0美元!欢迎来到$1;
console.log(翻译(文本“丹尼尔”、“布达佩斯”)试试这个

let name = args[0];
let place = args[1];

let message = 'Hi ${name}, welcome to ${place}`;

map
总是创建一个长度相同的新数组,但您希望返回一个字符串。您可以使用
reduce
代替文本作为初始值:

var-welcomeText='Hi$0!欢迎来到$1;
常量translate=(t,…args)=>args.reduce((a,x,i)=>a.replace(`${i}',x),t);
日志(翻译(welcomeText,'Daniel','Budapest')
问题在于创建了一个数组,因此每次替换都被视为一个单独的替换对象,因此首先替换
$0
并保留
$1
,但下次替换原始字符串时,只替换
$1
,而保留
$0

由于您不需要数组,因此可以使用每次更新
str

const translator=(str,…args)=>{
让translate=args.forEach((项目,索引)=>{
设stringToReplace='$'+索引;
str=str.replace(stringToReplace,项目);
});
console.log(str);
};
const WelcomeText='Hi$0!欢迎来到$1;

翻译(WelcomeText,“丹尼尔”,“布达佩斯”)我将传递到数组的转换器数组,如下所示:

const welcome = "Hi $0! Welcome to $1!";

const returnString = (str, name, city) =>
  str.replace("$0", name).replace("$1", city);

const translator = (str, arr) => {
  return arr.map(([name, city]) => returnString(str, name, city));
};

console.log(
  translator(welcome, [
    ["John", "NY"],
    ["Sara", "LA"],
    ["Bill", "SF"]
  ])
);
输出:
[“嗨,约翰!欢迎来到纽约!”,“嗨,萨拉!欢迎来到洛杉矶!”,“嗨,比尔!欢迎来到旧金山!”]
map
总是创建一个相同长度的新数组,但你想返回一个字符串。是的,但这并不像我需要的那样动态。所以我试着循环:)是的!我会同意的!:我非常感谢你。真是太棒了!对于如何实现此函数的错误处理,您有什么建议吗?我正在考虑将原始字符串与翻译后的字符串进行比较,看看有什么不同,但我还能做些什么吗?@OsgarSchölander始终欢迎,我不清楚错误处理对您的确切意义,因为您的最后一句话意味着您只想检查它是否改变了字符串中的任何内容(这属于函数的单元测试,因为这很可能是由于逻辑问题,而不是语法问题)。