首页 > 解决方案 > 如何从一个类中随机选择一个实例?

问题描述

我是 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() 是最好的答案。

标签: javascriptjqueryclass

解决方案


你可以做的是:

  1. 将所有词汇存储在一个数组中
const vocabs = [ new Vocab(...), new Vocab(...), new Vocab(...)];
  1. 过滤所有词汇以仅选择_hitCount小于 2的词汇
const availableVocabs = vocabs.filter((vocab) => vocab._hitCount < 2);
  1. 选择随机索引并返回带有该索引的词汇
const randomIndex = Math.floor((Math.random() * availableVocabs.length));
const selectedVocab  = availableVocabs[randomIndex];

推荐阅读