我正在开发一个游戏,玩家在 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
也不会修改原始数组,而是创建一个新数组。

慕尼黑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
添加回答
举报
0/150
提交
取消