在.map

时间:2018-06-14 11:55:56

标签: javascript reactjs

我想在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});
}

1 个答案:

答案 0 :(得分:1)

您只更换一个字符的原因是因为每次迭代都要替换原始字符串,而不是您在每个循环中生成的新字符串。话虽如此,你不应该这样做。正如评论中所提到的,在循环中使用setState()是低效且不必要的。

您已经知道,对于单词Orange(6个字母),您需要6 _。因此,不需要遍历每个字符并逐个替换它们。只需创建一个长度为_的字符串!

你可以这样做:

new Array(word.length + 1).join("_");

您现在已准备好将其置于您所在的州。换句话说:

this.setState({usedWord: new Array(word.length + 1).join("_")});