将大型数组对象分解为较小的块

时间:2019-05-20 12:08:37

标签: angular typescript

我有一个Array,它可能与1 - 600K记录不同。因此,我需要找到一种方法将这个较大的数组分解为较小的块,并对较小的块执行一些操作。

我该怎么做?

我的解决方案如下:我的问题是我不确定数组将包含多少个元素,因此我无法将其除以10,从而确定块大小。

for(const i = 0 ; i < largeArray.length; largeArray.length/10) {
   var p1 = largeArray.slice(i,whatisthechunksize);
}

4 个答案:

答案 0 :(得分:0)

您可以使用此函数,考虑原始数组的全部元素,它将返回一个块数组。

function splitArray(array, chunk) {
  const chunkSize = chunk || 10;

  const chunkedArray = array.reduce((acc, item) => {
    // delete the last item from acumulator
    // (it is made until the group get all the chunk items)
    let group = acc.pop();

    // validate if the group has the size defined
    if (group.length === chunkSize) {
      acc.push(group);
      group = [];
    }
    // Insert in the chunk group
    group.push(item);

    // push the group to the reduce accumulator
    acc.push(group);
    return acc;
  }, [[]]); // [[]] is used to initialize the accumulator with an empty array

  return chunkedArray;
}

答案 1 :(得分:0)

有些事情吗?

import { from } from 'rxjs';
import { skip, take } from 'rxjs/operators';

const source = from(array);

const p1 = source.pipe(
  skip(10 * i),
  take(10)
);

答案 2 :(得分:0)

使用Array.prototype.reduce。您还可以扩展该原型,以按所需数量进行分割:

Array.prototype.splitBy = function(size) {
  return this.reduce((p, n) => {
    if (p[p.length - 1].length < size) p[p.length - 1].push(n);
    else p.push([n]);
    return p;
  }, [[]]);
}

const data = new Array(500).fill(0).map((v, i) => i);

const splitted = data.splitBy(10);

console.log(splitted);
console.log('Size of splitted array = ', splitted.length);

答案 3 :(得分:0)

我会同意的!简单干净!

here复制

var size = 3; var arrayOfArrays = [1,2,3,4,5,6,7,8,9,10];

for (var i=0; i < arrayOfArrays.length; i+=size ) {
     var chunckedArray = arrayOfArrays.slice(i,i+size);
     console.log(chunckedArray); 

     for(var j = 0; j < chunckedArray.length; j++)
     {
       console.log(chunckedArray[j]); // Do operations
     }   
}