javascript - 将数组元素随机分配到新数组

标签 javascript arrays random

我有一个从 1 到 60 的数字数组

var originalArray = [1, 2, 3, 4 .... 58, 59, 60]//等等

我想 - 根据 2 到 4 之间的另一个数字 - 将这些数字随机拆分为指定数量的数组,并且每次结果都是唯一的。

例如:

distributeArray(2) 应生成两个 数组,每个数组包含从原始数组中随机选择的 30 个数字。

distributeArray(3) 应生成三个 数组,每个数组包含从原始数组中随机选择的 20 个数字。

我认为这是一个相当常见的情况,因此任何指示将不胜感激。提前致谢。

最佳答案

你可以这样做,首先随机播放,然后将数组拆分为 n 部分。

var arr = [...Array(61).keys()].slice(1)

function splitRandom(data, n) {
  var seen = [];
  var counter = 0;

  var shuffle = data.reduce(function(r, e) {
    function random() {
      var rand = parseInt(Math.random(0, arr.length) * arr.length);
      if (seen.indexOf(rand) != -1) {
        return random()
      } else {
        seen.push(rand)
        return rand;
      }
    }

    r[random()] = e;
    return r;
  }, [])

  var split = shuffle.reduce(function(r, e) {
    var c = counter++;
    r[c] = r[c].concat(e)
    counter = counter % n;
    return r;
  }, Array(n).fill([]))

  return split;
}

console.log(JSON.stringify(splitRandom(arr, 3)))
console.log(JSON.stringify(splitRandom(arr, 10)))
console.log(JSON.stringify(splitRandom(arr, 50)))

关于javascript - 将数组元素随机分配到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353837/

相关文章:

javascript - 如何根据数据属性定位选择选项?

javascript - 如何将用户提示(输入)存储到数组中并检索它的最大值和最小值?

java - Android - 生成随机数时崩溃

matlab - 高斯分布

javascript - 单击后如何加载选择下拉菜单项

javascript - 触发输入点击由于其标签而不起作用

javascript - 如何将 GridView 中控件的 id 传递给 Jquery?

javascript - 在循环中为我的数组缩进并创建新空间

ios - 排序数组导致错误的数据显示到单元格中

使用种子的 Java 随机数生成器