如何随机输出数组元素并将其从数组中移除?
问题:实现无重复随机展示数组元素
在我的程序中,用户点击按钮时会从数组中随机选择一个字符串元素并展示给用户。我的目标是实现「展示后将该元素从数组中移除」的功能,避免重复展示,确保用户每次看到的都是新元素。
v1版本代码思路
Array1 = [] // 存储所有元素的完整数组 Array2 = [] // 存储用户已查看过元素的数组
从Array1中输出元素给用户后,会将该元素加入Array2;在展示元素前,会将随机选中的元素与Array2中的所有元素进行交叉比对,大致逻辑如下:
for (let i = 0; i < NumberOfArray2Items; i++) { if (Array1ItemToDisplay === Array2[i]) { NumberOfMatches = j++ // 递增数值变量,大于0则表示该元素已展示过 } } if (NumberOfMatches === 0) { DisplayCurrentArrayItem(); } else if (NumberOfMatches > 0) { SelectAnotherArrayItemToDisplay(); }
我认为这个方案效率很低,因为它需要两个耗时的步骤:
- 遍历Array2中的所有元素进行交叉比对
- 若多次匹配到已展示元素,可能需要重复执行上述步骤数十甚至数百次
由于数组将包含数万个元素,我担心当前代码执行效率极低。请问是否有更简单、高效的方法,比如直接筛选出未展示的元素列表再从中选择?
内容的提问来源于stack exchange,提问作者king_anton
相关产品推荐
相关产品推荐

