如何从不包括某些给定数字的数组中生成随机数

我正在开发一个游戏,玩家在 1 到 36 之间选择 6 个数字。

我想要做的是创建一个新数组,排除 6 个选定的数字,新数组的长度为 30。


这是我所做的。

生成的第一个数组:


var selectedBalls = [2, 8, 25, 13, 8, 5]; //take this as the selected balls for example

var totalBalls = [];


function getBallsReady(){

  for (var i = 1; i <= 36; i++) {

    totalBalls.push(i);

  }

}

这是我尝试获取新数组的代码,但还不完美,因为所选 6 个数字中至少有 1 或 2 个数字仍然始终是新数组的一部分。


function generateNewBalls() {

  let clonedTotalBalls = [...totalBalls];


  selectedBalls.map((ball) => {

    clonedTotalBalls.splice(ball, 1);

  })

}

我究竟做错了什么?


ABOUTYOU
浏览 158回答 2
2回答

UYOU

可以这样做clonedTotalBalls&nbsp;=&nbsp;totalBalls.filter((element)=>!selectedBalls.includes(element))该filter函数采用一个谓词,该谓词在每个元素上运行一次,并为每个元素返回一个布尔值。在这种情况下,谓词是元素是否包含在selectedBalls数组中。因此,包含在selectedBalls数组中的所有元素都将返回 false,而所有其他元素都返回 true。filter也不会修改原始数组,而是创建一个新数组。

慕尼黑5688855

splice删除特定索引处的元素,而不是特定值。为了达到您想要的结果,您应该使用:function generateNewBalls() {&nbsp; let clonedTotalBalls = [...totalBalls];&nbsp; selectedBalls.map((ball) => {&nbsp; &nbsp; let indexToRemove = clonedTotalBalls.indexOf(ball)&nbsp; &nbsp; clonedTotalBalls.splice(indexToRemove, 1);&nbsp; })}(如果您不想返回值,或者考虑使用and ,我还建议您将最佳实践更改map为最佳实践。但这与您的问题并不真正相关)forEachfilterindexOf
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript