我有一个从 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/