javascript - 如何在递归之前从数组中删除某个元素?
问题描述
所以我正在尝试制作一个基本的炸弹线切割游戏,您可以从 6 种可能颜色的数组中随机选择 4 种颜色,但我无法获得它,因此 4 种随机颜色中没有重复的颜色。我不确定如何从数组中删除已经选择的颜色。我认为我的逻辑是错误的。
const colors = ['Blue', 'Red', 'Yellow', 'White', 'Black', 'Green']
function getXRandomColors(colors, x, result) {
if (x === 0) return result
const randomIndex = Math.floor(Math.random() * colors.length)
if (colors.includes(randomIndex)){
colors = colors.filter(color => color !== randomIndex)}
return getXRandomColors(colors, x - 1, [...result, colors[randomIndex]])
}
var fourRandomColors = getXRandomColors(colors, 4, [])
console.log('The wires are: ' + fourRandomColors);
解决方案
我将创建一个临时变量设置为选择的颜色,然后randomIndex
在继续递归之前删除该数组条目。
const colors = ['Blue', 'Red', 'Yellow', 'White', 'Black', 'Green']
function getXRandomColors(colors, x, result) {
if (x === 0) return result
const randomIndex = Math.floor(Math.random() * colors.length)
let pickedColor = colors[randomIndex];
colors.splice(randomIndex, 1);
return getXRandomColors(colors, x - 1, [...result, pickedColor])
}
var fourRandomColors = getXRandomColors(colors, 4, [])
console.log('The wires are: ' + fourRandomColors);
这样你就可以保证不会有任何重复。
在您当前的示例中出现了几个问题:
在您的过滤器功能中
colors = colors.filter(color => color !== randomIndex)}
条件 ( color !== randomIndex
) 将始终为真,因为随机索引是一个数字,而颜色是一个字符串。如果您比较索引,您想要做的是;
colors = colors.filter((color, index) => index !== randomIndex)}
但即使这样也不会产生预期的结果,因为您要从数组中删除随机索引而不将其存储在某处,这就是重复项首先出现的方式。
推荐阅读
- python - 在python中使用glob匹配字符串中的模式
- gradle - Gradle 加速 - 使用模块方法
- postgresql - 如何查询列中数据的缩写?
- javascript - 如何在这个交叉点观察者内切换元素?
- android - Android:是否可以为自定义视图“公开”子视图属性?
- google-closure-library - 如何在 Parcel 中使用自定义 Blockly 模块?
- regex - 我需要积极的向后看吗?
- windows - 使用包含双引号的密码提取存档
- curl - 如何使用 facebook API 来限制直播视频的观众?
- azure - 无法登录 Azure 门户