我想在React.js中制作一个刽子手游戏,我有一个函数在一个单词列表中取一个随机单词,我想拆分这个单词并用“_”替换每个字母但是当我设置.map中的setState,只需要一个“_”而不是字母的次数。
有人可以帮帮我吗?
const words = [...this.state.wordList];
const length = words.length;
const random = Math.floor(Math.random() * length);
const word = this.state.wordList[random].word;
const splitedWord = word.split("");
splitedWord.map(( letter, index ) => {
const hiddenLetter = letter.replace(/./, "_");
this.setState({usedWord: hiddenLetter});
}
答案 0 :(得分:1)
您只更换一个字符的原因是因为每次迭代都要替换原始字符串,而不是您在每个循环中生成的新字符串。话虽如此,你不应该这样做。正如评论中所提到的,在循环中使用setState()
是低效且不必要的。
您已经知道,对于单词Orange
(6个字母),您需要6 _
。因此,不需要遍历每个字符并逐个替换它们。只需创建一个长度为_
的字符串!
你可以这样做:
new Array(word.length + 1).join("_");
您现在已准备好将其置于您所在的州。换句话说:
this.setState({usedWord: new Array(word.length + 1).join("_")});