我有一个Array
,它可能与1 - 600K
记录不同。因此,我需要找到一种方法将这个较大的数组分解为较小的块,并对较小的块执行一些操作。
我该怎么做?
我的解决方案如下:我的问题是我不确定数组将包含多少个元素,因此我无法将其除以10,从而确定块大小。
for(const i = 0 ; i < largeArray.length; largeArray.length/10) {
var p1 = largeArray.slice(i,whatisthechunksize);
}
答案 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
}
}