1.考虑到性能问题,如何快速从一个巨大的数组中随机获取部分元素。
比如有个数组有100K个元素,从中不重复随机选取10K个元素。
/* 洗牌算法:
1.生成一个0 - arr.length 的随机数
2.交换该随机数位置元素和数组的最后一个元素,并把该随机位置的元素放入结果数组
3.生成一个0 - arr.length - 1 的随机数
4.交换该随机数位置元素和数组的倒数第二个元素,并把该随机位置的元素放入结果数组
依次类推,直至取完所需的10k个元素
*/
function (arr, size){
let result = []
for (let i = 0; i < size; i++) {
let randomIndex = Math.floor(Math.random() * (arr.length - i))
let item = arr[randomIndex]
result.push(item)
arr[randomIndex] = arr[arr.length - 1 - i]
arr[arr.length - 1 - i] = item
}
return result
}
洗牌算法
最新推荐文章于 2024-07-12 18:56:03 发布