javascript - 从数组中随机绘制而不回退
问题描述
我想从一个数组中随机绘制,而我的初始数组中没有绘制的值。所以基本上在每次迭代之后,数组都会缩小 um 1 个值。
我已经实现了随机抽取部分。然而,我在“放松的部分”中挣扎。
const arr = [{
name: 'Company1',
symbol: 'C1',
},
{
name: 'Company2',
symbol: 'C2',
},
{
name: 'Company3',
symbol: 'C3',
},
{
name: 'Company4',
symbol: 'C4',
},
]
for (let i = 0; i < arr.length; i++) {
const value = arr[Math.floor(Math.random() * arr.length)]
console.log(`${i} draw: ${JSON.stringify(value)}`)
}
任何关于如何实施该without laying back
部分的建议。
解决方案
Javascript 的 Splice是实现这一点的绝佳功能。
由于您已经完成了“随机”部分,我们只需要从数组中提取元素,而不仅仅是打印它。
我们可以用splice
to say: companies.splice(randomPosition, 1)[0]
,基本上就是:
randomPosition
在from之后删除一个元素companies
。- 这将返回一个
array with removed elements
,因此我们使用从返回[0]
中获取第一个。splice
这将导致这样的事情:
const companies = [
{ name: 'Company 1', symbol: 'C1' },
{ name: 'Company 2', symbol: 'C2' },
{ name: 'Company 3', symbol: 'C3' },
{ name: 'Company 4', symbol: 'C4' },
]
while (companies.length > 0) {
const randomPosition = Math.floor(Math.random() * companies.length)
const removedElement = companies.splice(randomPosition, 1)[0]
console.log(removedElement)
}
console.log('companies is empty: ', companies)
PS:修改一个array
内部 afor
来评估它的length
每次迭代是一种不好的做法,所以我将它更改为一个简化的循环。
推荐阅读
- r - 从字符串中删除引号空格
- django-models - 我无法在 django 的 sqlite3 中创建新表
- c++ - 如何解决此代码中的浮点错误核心转储?
- python - Qtile ArchLinux 中的“导入错误:小部件”
- javascript - 230:45未捕获的类型错误:
- google-apps-script - 多级文件夹结构
- c++ - Qt 程序运行但弹出窗口不显示任何内容
- tensorflow - 在 Keras 的“TimeDistributed(Dense())”层中使用正则化器.l1_l2 时出错
- javascript - 检查变量名是否与字符串相同
- r - st_distance - 如何可视化大型空间数据集中不同变量之间的距离