我想从数组中随机抽取,而不在初始数组中包含抽取的值。所以基本上在每次迭代之后数组都会缩小 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)}`)
}
关于如何实现无需放松
部分的任何建议。
最佳答案
Javascript's Splice是实现这一目标的一个很棒的函数。
由于您已经完成了“随机”部分,因此我们只需要从数组中提取元素,而不是仅仅打印它。
我们可以使用splice
来表示:companies.splice(randomPosition, 1)[0]
,基本上是:
- 从
公司
中删除randomPosition
之后的一个元素。 - 这将返回一个删除了元素的
数组
,因此我们使用[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:在每次迭代都会评估其长度
的for
中修改array
是一种不好的做法,所以我将其更改为一个简化的循环。
关于javascript - 从数组中随机抽取,无需后退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693143/