为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2022-05-22 18:14:07
我正在开发一个游戏,玩家在 1 到 36 之间选择 6 个数字。我想要做的是创建一个新数组,排除 6 个选定的数字,新数组的长度为 30。这是我所做的。生成的第一个数组:var selectedBalls = [2, 8, 25, 13, 8, 5]; //take this as the selected balls for examplevar 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);  })}我究竟做错了什么?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

可以这样做

clonedTotalBalls = totalBalls.filter((element)=>!selectedBalls.includes(element))

filter函数采用一个谓词,该谓词在每个元素上运行一次,并为每个元素返回一个布尔值。在这种情况下,谓词是元素是否包含在selectedBalls数组中。因此,包含在selectedBalls数组中的所有元素都将返回 false,而所有其他元素都返回 true。filter也不会修改原始数组,而是创建一个新数组。


查看完整回答
反对 回复 2022-05-22
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

splice删除特定索引处的元素,而不是特定值。为了达到您想要的结果,您应该使用:


function generateNewBalls() {

  let clonedTotalBalls = [...totalBalls];


  selectedBalls.map((ball) => {

    let indexToRemove = clonedTotalBalls.indexOf(ball)

    clonedTotalBalls.splice(indexToRemove, 1);

  })

}

(如果您不想返回值,或者考虑使用and ,我还建议您将最佳实践更改map为最佳实践。但这与您的问题并不真正相关)forEachfilterindexOf


查看完整回答
反对 回复 2022-05-22
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号