实现一个函数 sampleSize(arr, n),从数组中随机取 n 个元素

推荐答案

本题详细解读

1. 函数功能

sampleSize(arr, n) 函数的作用是从数组 arr 中随机选取 n 个元素,并返回这些元素组成的新数组。

2. 参数说明

  • arr: 输入的数组,可以是任意类型的元素组成的数组。
  • n: 需要从数组中随机选取的元素个数。

3. 实现思路

  1. 边界检查:首先检查 n 是否大于数组的长度。如果 n 大于数组长度,则抛出错误,因为无法从数组中选取比其长度更多的元素。
  2. 数组洗牌:使用 arr.slice() 创建一个数组的副本,避免修改原数组。然后使用 sort() 方法结合 Math.random() 对数组进行随机排序(洗牌)。
  3. 选取元素:从洗牌后的数组中截取前 n 个元素,并返回这些元素组成的新数组。

4. 代码解析

  • arr.slice():创建一个数组的副本,避免直接修改原数组。
  • sort(() => Math.random() - 0.5):通过随机数生成器对数组进行洗牌。Math.random() 返回一个 0 到 1 之间的随机数,减去 0.5 后,排序函数会随机返回正数或负数,从而实现随机排序。
  • shuffled.slice(0, n):从洗牌后的数组中截取前 n 个元素。

5. 注意事项

  • 该实现使用了 Math.random() 进行洗牌,虽然简单,但在某些情况下可能不够均匀。如果需要更严格的随机性,可以考虑使用 Fisher-Yates 洗牌算法。
  • 如果 n 等于数组长度,函数将返回整个数组的随机排列。
纠错
反馈