Javascript 我的代码很复杂。我怎样才能减少它?

Javascript 我的代码很复杂。我怎样才能减少它?,javascript,html,css,Javascript,Html,Css,我正在尝试编写一个简单的游戏,名为“Atom”。它工作得很好,但我有一个小问题。VisualStudio表示,下面的第一个代码复杂度为10,第二个代码复杂度为13。如何降低复杂性?提前谢谢大家:) checkForWin(){ 让胜利者=真; for(设i=0;i

我正在尝试编写一个简单的游戏,名为“Atom”。它工作得很好,但我有一个小问题。VisualStudio表示,下面的第一个代码复杂度为10,第二个代码复杂度为13。如何降低复杂性?提前谢谢大家:)

checkForWin(){
让胜利者=真;
for(设i=0;i

},

简化的一种方法是将迭代与条件分离;Visual Studio代码的自动重构将使您能够非常轻松地提取函数,因此您的checkForWin函数最终可能看起来像

checkForWin(){
让胜利者=真;
for(设i=0;i
现在它的圈复杂度为4。(提取的函数将有一个8)

您可以采取的另一个步骤是展开其中的一些条件,看看是否可以消除任何额外的代码。在本例中,请注意,
if(!this.htmlBoard[j][i].classList.contains(“atom”){
行是无关的,因为它已经由初始的
if
语句处理;删除它将使提取的函数降到7


在第二个函数上执行相同的重构方法将产生类似的结果,并且最终应得到较低的总复杂度分数

这可能更适合于有更好的方法来制定代码,但我认为没有任何基本方法可以避免您所具有的圈复杂度,至少在没有代码比它需要的更混乱。这回答了你的问题吗?这个问题更适合于堆栈交换,因为它是工作代码,你想知道如何使它更好。请不要担心堆栈溢出。首先感谢你试图帮助我,但我真的不懂代码。也许我应该解释我的g我有一个5x5、6x6和7x7的棋盘,按“播放”键后随机选择。场中隐藏着2-3个原子,玩家必须通过猜测猜出它们的位置。很像“扫雷舰”。方法是checkForWin()应该检查玩家的猜测是否正确。如果我使用你的代码,它不会检查条目是否正确:/i我发布的代码是为了说明这个概念,而不是作为替代品。你不明白什么部分?
checkForWin(){
    let winner = true;
    for(let i = 0; i < this.fieldSize; i++){
        for(let j = 0; j < this.fieldSize; j++){
            if(this.htmlBoard[j][i].classList.contains("atom")){
                if(this.htmlBoard[j][i].classList.contains("suspectAtom")){
                    this.setField(j, i, "correct");
                }
                else{
                    this.setField(j, i, "wrong");
                    winner = false
                }    
            }
            else if(this.htmlBoard[j][i].classList.contains("suspectAtom")){
                if(!this.htmlBoard[j][i].classList.contains("atom")){
                    this.setField(j, i, "wrong");
                    winner = false
                }
            }
        }
    }
    return winner;
},



setBorder() {
for (let y = 0; y < this.fieldSize; y++) {
  for (let x = 0; x < this.fieldSize; x++) {
    if (
      x == y ||
      (x === 0 && y === this.fieldSize - 1) ||
      (y === 0 && x === this.fieldSize - 1)
    ) {
      continue;
    }
    if (
      y == 0 ||
      x == 0 ||
      y == this.fieldSize - 1 ||
      x == this.fieldSize - 1
    ) {
      this.board[x][y] = "borderField";
      this.htmlBoard[x][y].classList.add("borderField");
    }
  }
}