如何在运行next方法之前从数组中删除项目?

时间:2019-06-08 01:31:35

标签: javascript

我正在尝试创建纸牌洗牌程序,该程序从数组中返回随机纸牌,然后删除该数组项,因此无法再次处理。然后,该程序重复。我已经为此工作了一段时间,似乎没有任何效果。我认为问题在于该程序无法访问更新数组/该程序未以线性顺序执行,但我不确定。

var shuffler = {
  cards: [...],
  displayCard1: function() {
   document.getElementById("card-1").style.backgroundImage = 'url(' + 
this.cards[this.randomizer()] + ')';
  },
  displayCard2: function() {
    document.getElementById("card-2").style.backgroundImage = 'url(' + 
this.cards[this.randomizer()] + ')';
  },
   ...
  },
  randomizer: function() {
    var randomized = Math.floor(Math.random() * this.cards.length);
    this.cards.splice(this.randomized, 1);
    return randomized;  
  }
};
shuffler.displayCard1();
shuffler.displayCard2();
...

3 个答案:

答案 0 :(得分:1)

这对我有用:

 randomizer: function() {
    // take shuffle from your array 
    var randomized = this.cards[Math.floor(Math.random() * this.cards.length)];

    // Get Index of element to be removed 
    const index=this.cards.indexOf(randomized);
    // remove element at this index
    this.cards.splice(index, 1);  
  }

现在您可以直接致电

this.randomizer();

答案 1 :(得分:0)

您从数组中删除了元素,然后尝试显示该元素:

this.cards[this.randomizer()]

其中radomizer已经删除了您要访问的卡。现在,您将访问阵列中的下一张卡片,或者可能不在阵列末端。

答案 2 :(得分:0)

let removedCard = this.cards.splice(this.randomizer(), 1)

除了将randomizer()函数更改为不拼接卡片外,仅返回随机索引即可。

randomizer: function() {
  return Math.floor(Math.random() * this.cards.length);
}