JavaScript:如何将数组中的数据推送到子数组中,每 16 个项目都有一个数组

JavaScript: How to push data in array, into subarrays with an array for each 16 items

我有一个示例数据集。我想将这些数据推送到一个数组中,每 16 条数据有一个子数组。我开始了,但卡住了。有什么想法吗?

[ [16 names], [16 names ], [16 names] ]; // This is the output I want.

var data = ["Michael", "Marc", "John", "David", "Nick", "Mom", "Al", "Marlana", "Max", 
            "Scooter", "Pat", "George", "Lynne", "Tatyana", "Kim", "Kerry", "Enza", "Matt",
            "Liz", "Linda", "Ryan",
            "Ed", "Frank", "Christine", "Bill", "Jack", "Jill", "Joe", "Harry", "Red",
            "Fred", "Iggy", "Brian", "Bob", "Paul", "Gil", "Damian", "Kip", "Phil", "Curtis", "Aly",
           "Richard", "Robin", "Grant", "Ian", "Raptor", "T-Rex", "Stegosaurux", "Triceratops", "Compy"]


var sixteengroup = [];

for (var i = 0; i < data.length; i++){
  if (i % 16 == 0) sixteengroup.push([i])
}


console.log(sixteengroup);

尝试以下操作:

function split(a, n) {
    var len = a.length,out = [], i = 0;
    while (i < len) {
        var size = Math.ceil((len - i) / n--);
        out.push(a.slice(i, i += size));
    }
    return out;
}
var data = ["Michael", "Marc", "John", "David", "Nick", "Mom", "Al", "Marlana", "Max", 
            "Scooter", "Pat", "George", "Lynne", "Tatyana", "Kim", "Kerry", "Enza", "Matt",
            "Liz", "Linda", "Ryan",
            "Ed", "Frank", "Christine", "Bill", "Jack", "Jill", "Joe", "Harry", "Red",
            "Fred", "Iggy", "Brian", "Bob", "Paul", "Gil", "Damian", "Kip", "Phil", "Curtis", "Aly",
           "Richard", "Robin", "Grant", "Ian", "Raptor", "T-Rex", "Stegosaurux", "Triceratops", "Compy"]

sixteengroup = split(data, data.length/16);
document.write(JSON.stringify(sixteengroup));

我用这个函数按任意数字分组

  groupBy = function (array,howmany)
    {
    var newarray =[];
    index=0;
    for(a=0;a<array.length;a++){
       if(a%howmany==0){
          if(a!=0)
           index++;               
          newarray[index]=[];
          newarray[index].push(array[a]);

      }else{
         newarray[index].push(array[a]);

      }
   }
  return newarray;
}

 items=groupBy(data,16);

拼接(破坏性)或切片听起来是个好主意

var data = ["Michael", "Marc", "John", "David", "Nick", "Mom", "Al", "Marlana", "Max","Scooter", "Pat", "George", "Lynne", "Tatyana", "Kim", "Kerry", "Enza", "Matt","Liz", "Linda", "Ryan", "Ed", "Frank", "Christine", "Bill", "Jack", "Jill", "Joe", "Harry", "Red", "Fred", "Iggy", "Brian", "Bob", "Paul", "Gil", "Damian", "Kip", "Phil", "Curtis", "Aly", "Richard", "Robin", "Grant", "Ian", "Raptor", "T-Rex", "Stegosaurux", "Triceratops", "Compy"]

function chunk(source,size) { // non-destructive
  var arrofarr=[], cnt=0;
  while (cnt < source.length) { 
    arrofarr.push(source.slice(cnt,cnt+size)); 
    cnt+= arrofarr[arrofarr.length-1].length;
  }
  return arrofarr;
}  
console.log(chunk(data,16));

// ----------------------------------

function chunkie(source,size) { // destructive
  var arrofarr=[];
  while (source.length) { arrofarr.push(source.splice(0,size)); }
  return arrofarr;
}
console.log(chunkie(data,16));

试试这个:

var data = ["Michael", "Marc", "John", "David", "Nick", "Mom", "Al", "Marlana", "Max", 
        "Scooter", "Pat", "George", "Lynne", "Tatyana", "Kim", "Kerry", "Enza", "Matt",
        "Liz", "Linda", "Ryan",
        "Ed", "Frank", "Christine", "Bill", "Jack", "Jill", "Joe", "Harry", "Red",
        "Fred", "Iggy", "Brian", "Bob", "Paul", "Gil", "Damian", "Kip", "Phil", "Curtis", "Aly",
       "Richard", "Robin", "Grant", "Ian", "Raptor", "T-Rex", "Stegosaurux", "Triceratops", "Compy"]


var sixteengroup = [];

var x = -1;
for (var i = 0; i < data.length; i++){

    if (i % 16 == 0) {
        sixteengroup[++x] = [data[i]]
        continue;
    } 

    sixteengroup[x].push(data[i])

}

console.log(sixteengroup);

Fiddle 这里:https://jsfiddle.net/n9ro2vwr/1/

也许创建一个带有 2 个参数的函数来拥有数组,第二个参数来限制每秒面额数组的项目数量,就像这样?

function data(arr, size) {
  var array = [];
    while(arr.length > 0){
         array.push(arr.splice(0,size));   
    }
  return console.log(array);
}

data(["Michael", "Marc", "John", "David", "Nick", "Mom", "Al", "Marlana", "Max", 
            "Scooter", "Pat", "George", "Lynne", "Tatyana", "Kim", "Kerry", "Enza", "Matt",
            "Liz", "Linda", "Ryan",
            "Ed", "Frank", "Christine", "Bill", "Jack", "Jill", "Joe", "Harry", "Red",
            "Fred", "Iggy", "Brian", "Bob", "Paul", "Gil", "Damian", "Kip", "Phil", "Curtis", "Aly",
           "Richard", "Robin", "Grant", "Ian", "Raptor", "T-Rex", "Stegosaurux", "Triceratops", "Compy"], 16)

https://jsfiddle.net/ToreanJoel/dq7t7snx/

你可以玩玩看看合不合你的口味