如何避免副作用 (Javascript)

问题描述

我目前正在构建一个二十一点游戏,我的一个课程叫做“Deck”。这套牌需要做两件事:

  1. 返回一组其他对象可以使用的卡片(这相当于将这些卡片发出)
  2. 从牌组中取出这些牌(一旦发了牌,就应该将其取出)。

目前,我通过创建两个方法实现了这两个功能:selectCards()removeIndexFromDeck。我首先调用 selectCards() 返回选定的卡片,但也调用 removeIndexFromDeck()

这种方法是否违反了最佳做法?看起来我的 selectCards() 函数既有返回值又有副作用。

如果确实违反了最佳实践,我将如何更改这些方法,但要确保我仍然能够返回选定的卡片并将它们从牌组中移除。

谢谢!

class Deck {
  constructor() {
    this.deck = [];
    ['♦','♣','♥','♠'].forEach(suit => {
      ['A','2','3','4','5','6','7','8','9','10','J','Q','K'].forEach(value => {
        this.deck.push(`${value}${suit}`);
      });
    });
  }

  selectCards(numCards) {
    let selectedCards = [];

    while (numCards > 0) {
      let randIndex = Math.floor(Math.random() * this.deck.length);
      selectedCards.push(this.deck[randIndex]);
      this.removeIndexFromDeck(randIndex);
      numCards -= 1;
    }

    return selectedCards;
  }

  removeIndexFromDeck(index) {
    this.deck.splice(index,1);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)