javascript - 如何从一个类中随机选择一个实例?
问题描述
我是 JS 的初学者,我正在尝试创建一个随机选择器,它可以从英语课的单词列表中给我一个单词。我创建了一个新类,其中包含所有格式信息(名称、图像、背景颜色、边框颜色),供您单击按钮生成随机单词时使用。我想访问一个特定的实例(暂时是硬编码的,但我希望在我了解更多时成为用户输入),然后将每个属性应用于相应的 CSS 代码以更改屏幕上的图像,并且在每个如果已经选择了一个单词,单击它应该注册,并在选择两次后停止选择它。从本质上讲,我不确定如何开始处理这个问题。一旦我创建了类实例,我可以迭代它们吗?
我能够让它与一组可以迭代和绘制的对象一起工作,但是一旦它击中了这么多次,我就无法阻止它。我尝试将值推送到一个新数组,然后比较两个数组,但这似乎不起作用。我想象我可以在一个类中增加一个 hitCount 属性并阻止它选择一个已经为 2 的属性。
class Vocab {
constructer(name, image, bgcolor, bordercolor) {
this._name = name;
this._image = image;
this._bgcolor = bgcolor;
this._bordercolor = bordercolor;
this._hitCount = 0;
}
get name() {
return this._name;
}
get image() {
return this._image;
}
get bgcolor() {
return this._bgcolor;
}
get bordercolor() {
return this._bordercolor;
}
incrementHitCount() {
this._hitCount++;
}
}
const running = new Vocab('running', '<img class="verb-pics" src="./images/running.png">', '#fc4e4e', '#9c3333');
我还尝试将 Vocab 作为对象数组,我可以获得属性,但仍然不确定如何在选择每个实例后停止它。有了这个,当使用“running.name”之类的东西时,我似乎什至无法访问每个属性。
编辑:最好的答案是在评论中,虽然我应该把它放在这里让它更清楚......
将一个数组中的每个元素加倍,改组数组,然后使用 .pop() 是最好的答案。
解决方案
你可以做的是:
- 将所有词汇存储在一个数组中
const vocabs = [ new Vocab(...), new Vocab(...), new Vocab(...)];
- 过滤所有词汇以仅选择
_hitCount
小于 2的词汇
const availableVocabs = vocabs.filter((vocab) => vocab._hitCount < 2);
- 选择随机索引并返回带有该索引的词汇
const randomIndex = Math.floor((Math.random() * availableVocabs.length));
const selectedVocab = availableVocabs[randomIndex];
推荐阅读
- c# - 在子目录中搜索特定文件的最快方法
- selenium - 如何使用 Selenium 处理同一定位器的多个 xpath?
- javascript - 更新 localStorage 值(待办事项列表)
- unity3d - Unity 3d刚体移动但不是子对象
- azure - 使用 Powershell 的 Azure 成本警报
- python - 无论如何,我可以记录不规则阵列的形状吗?
- flutter - 如何在 Flutter 中使用 multi_image_picker 调整图像大小?
- python - OpenCv 形状检测到形状转换(Python)
- jquery - 有什么方法可以检查 slick 中的所有图像是否都已加载?
- android - 从 Azure Active Directory B2C Android/Java 中删除用户