iac*_*lin 0 javascript arrays split
我需要一些帮助。
所以我有以下数组:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
Run Code Online (Sandbox Code Playgroud)
我试图将这个数组分割成长度在给定范围内的块
const minChunkSize = 2;
const maxChunkSize = 5;
Run Code Online (Sandbox Code Playgroud)
因此块大小可以是 和 之间的任意值,minChunksize并且maxChunkSize随机生成。
可能的输出:
[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
or
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
or
[[1, 2], [3, 4, 5, 6, 7], [8, 9, 10]]
or
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
etc...
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
这有点低效,但您可以创建一个递归方法,逐步对数组中的元素进行 slice()随机数(介于 somemin和之间)。max如果最终生成的结果具有长度小于最小值的some()数组,则该方法会调用自身。
const randSplit = (arr, min, max) =>
{
// Check arguments.
if (min > arr.length || max <= min)
return [arr];
let res = [], i = 0, rnd;
while (i < arr.length)
{
rnd = Math.floor(Math.random() * (max - min)) + min;
res.push(arr.slice(i, i + rnd));
i += rnd;
}
if (res.some(x => x.length < min))
return randSplit(arr, min, max)
else
return res;
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(JSON.stringify(randSplit(arr, 2, 5)));Run Code Online (Sandbox Code Playgroud)
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}Run Code Online (Sandbox Code Playgroud)