JavaScript-使用随机数量的对象将数组拆分为多个组

JavaScript-使用随机数量的对象将数组拆分为多个组,javascript,arrays,split,slice,Javascript,Arrays,Split,Slice,我正在开发这个小应用程序,我有一个包含100多个对象的数组,我想将它们分组。棘手的是,我希望新创建的数组包含随机数目的对象。例如: 首字母: [“a0”、“a1”、“a2”、“a3”、“a4”、“a5”、“a6”、“a7”、“a8”、“a9”、“a10”、“a11”、“a12”、“a13”、“a14”、“a15”、“a16”、“a17”、“a18”、“a19”] 修改: [“a0”、“a1”、“a2”]、[“a3”、“a4”、“a5”、“a6”、“a7”]、[“a8”]、[“a9”、“a10”]

我正在开发这个小应用程序,我有一个包含100多个对象的数组,我想将它们分组。棘手的是,我希望新创建的数组包含随机数目的对象。例如:

首字母: [“a0”、“a1”、“a2”、“a3”、“a4”、“a5”、“a6”、“a7”、“a8”、“a9”、“a10”、“a11”、“a12”、“a13”、“a14”、“a15”、“a16”、“a17”、“a18”、“a19”]

修改: [“a0”、“a1”、“a2”]、[“a3”、“a4”、“a5”、“a6”、“a7”]、[“a8”]、[“a9”、“a10”]…

我想你明白了。在过去的几个小时里,我一直在想这个问题,我就是想不出来

我希望你能帮助我!
非常感谢

因为您没有指定每个数组的最小数组数或最小/最大元素数,这里有一个通用函数,您可以为每个数组指定最小/最大元素数。请注意,虽然这并没有严格地强制执行最小元素,但实际上可能无法100%执行,这取决于原始数组中有多少个元素,以及每个数组元素随机分配了多少个元素。例如,如果您有10个原始元素,并且执行最小2个最大4个,那么最终可能会得到3/3/3/1,因为最小值将一直执行,直到没有足够的元素执行为止。你真的没有给出任何“规则”

min
max
都是可选的,默认为1。如果只指定了
min
max
将默认为
min

还请注意,由于数组是通过引用传递的,因此默认情况下,这将“清空”原始数组。如果要保留原始数组,请取消对函数中第一行的注释(如果选择原型,则显然为n/a)

示例

var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];

// randChunkSplit(letters)
[["a"], ["b"], ["c"], ["d"], ["e"], ["f"], ["g"], ["h"], ["i"], ["j"], ["k"], ["l"], ["m"], ["n"], ["o"], ["p"], ["q"], ["r"], ["s"], ["t"], ["u"], ["v"], ["w"], ["x"], ["y"], ["z"]]

// randChunkSplit(letters,3)
[["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"], ["j", "k", "l"], ["m", "n", "o"], ["p", "q", "r"], ["s", "t", "u"], ["v", "w", "x"], ["y", "z"]]

// randChunkSplit(letters,1,3)
[["a"], ["b", "c"], ["d", "e"], ["f", "g", "h"], ["i", "j", "k"], ["l"], ["m"], ["n", "o"], ["p", "q"], ["r"], ["s", "t"], ["u", "v", "w"], ["x", "y", "z"]]

// randChunkSplit(letters,2,3) 
[["a", "b", "c"], ["d", "e", "f"], ["g", "h"], ["i", "j", "k"], ["l", "m", "n"], ["o", "p", "q"], ["r", "s", "t"], ["u", "v", "w"], ["x", "y", "z"]]

// randChunkSplit(letters,2,3)
// same thing as before, but notice how this time we end up with just 1 elem left over
[["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"], ["j", "k", "l"], ["m", "n", "o"], ["p", "q"], ["r", "s"], ["t", "u", "v"], ["w", "x", "y"], ["z"]]
或者,如果需要,可以将其原型化为阵列,如下所示:

Array.prototype.randChunkSplit = function (min,max) {
  var arrs = [],size=1; 
  var min=min||1;
  var max=max||min||1;
  while (this.length > 0) {
    size = Math.min(max,Math.floor((Math.random()*max)+min));
    arrs.push(this.splice(0, size));
  }
  return arrs;
}

var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];

letters.randChunkSplit(1,4)

以下是您可能需要执行的操作的框架:

var initial = ["a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10"];
var modifiedArrays = [];
var totalItems = 0
var arraySize = 1

while (totalItems < initial.length) {
    if ((initial.length - totalItems) <= 30)}
        arraySize = initial.length - totalItems
        totalItems += arraySize
    }
    else
    {
        arraySize = Math.floor((Math.random()*30)+1);
        totalItems += arraySize
    }

    modifiedArrays.push(initial.slice(totalItems - arraySize, arraySize + 1));
}
var初始值=[“a0”、“a1”、“a2”、“a3”、“a4”、“a5”、“a6”、“a7”、“a8”、“a9”、“a10”];
var=Darrays[];
var totalItems=0
var arraySize=1
while(项目总数<初始长度){

如果((initial.length-totalItems)我做了一些假设,即数组的数量没有设置大小或最小大小

var original = ["a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19"];

var results = [];

var breaker = function(arr){
   if(arr.length === 0){
      return;
   }
   var pieceSize = Math.floor(Math.random()*arr.length) + 1,
       result = arr.splice(0, pieceSize);
   results.push(result);
   breaker(arr);   
}

是否有一定数量的组要将数组拆分为?每个组中是否有最小-最大数量的元素?是否有关于如何拆分它们的规则,如组数和组大小?这正是我需要的。非常感谢!!
var original = ["a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19"];

var results = [];

var breaker = function(arr){
   if(arr.length === 0){
      return;
   }
   var pieceSize = Math.floor(Math.random()*arr.length) + 1,
       result = arr.splice(0, pieceSize);
   results.push(result);
   breaker(arr);   
}