将数组拆分为给定范围内随机长度的块

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)

感谢您的帮助!

Shi*_*rsz 5

这有点低效,但您可以创建一个递归方法,逐步对数组中的元素进行 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)