Javascript 使用接头替换找到的所有项目

Javascript 使用接头替换找到的所有项目,javascript,arrays,loops,Javascript,Arrays,Loops,所以我想找到与字符串匹配的所有项并替换它们。由于某些原因,我无法让它迭代并替换所有。任何帮助都将不胜感激 const word=['h','e','l','l','o']; 变量占位符=word.map(e=>{ 返回“*” }); 让字母='l'; word.forEach(e=>{ 如果(e==字母){ 占位符.拼接(单词.indexOf(字母),1,字母); } }); console.log(占位符)在对forEach的回调中使用index参数,而不是始终使用找到字母的第一个索引 c

所以我想找到与字符串匹配的所有项并替换它们。由于某些原因,我无法让它迭代并替换所有。任何帮助都将不胜感激

const word=['h','e','l','l','o'];
变量占位符=word.map(e=>{
返回“*”
});
让字母='l';
word.forEach(e=>{
如果(e==字母){
占位符.拼接(单词.indexOf(字母),1,字母);
}
});

console.log(占位符)
在对
forEach
的回调中使用index参数,而不是始终使用找到字母的第一个索引

const word=['h','e','l','l','o'];
变量占位符=word.map(e=>{
返回“*”
});
让字母='l';
单词forEach((e,i)=>{
如果(e==字母){
占位符.拼接(i,1,字母);
}
});

console.log(占位符)注意我的答案不是最有效的。。。相反,我想解释为什么你的函数不起作用,以及你将如何编辑它以使这种方法起作用

您的word.forEach函数将两次替换占位符中的同一个字母,因为Array.indexOf()始终返回第一次出现的索引。。。而且你从不更新word。。您只更新占位符。您需要复制word并对其进行更改

const word=['h','e','l','l','o'];
让tempWord=JSON.parse(JSON.stringify(word));
变量占位符=word.map(e=>{
返回“*”
});
让字母='l';
tempWord.forEach(e=>{
如果(e==字母){
占位符.拼接(临时单词.索引of(字母),1,字母);
tempWord.splice(tempWord.indexOf(字母),1,“*”);
}
});

console.log(占位符)只是为了澄清一下,您是否希望结果是
**ll*
?既然您在循环中进行逐字替换,那么splice似乎是这个工作的错误工具,为什么不在创建
占位符时对替换进行排序呢,即
var placeholder=word.map(e=>e==letter?e:“*”)
?是,输出应为
**ll*
。我应该多解释一点。这是一个刽子手类型的游戏。所以我有一个事件侦听器设置。当选择一个字母时,它将检查单词,然后显示正确的字母。我将试用map方法。谢谢但是仍然不明白为什么它不起作用,因为forEach正在迭代原始数组中的每个元素。因为您要替换相同的索引两次。检查
word.indexOf(letter)
每次返回的值,您将看到每次都是相同的。明白了!谢谢你的解释。谢谢你!