Chunking an Array with ColdFusion

code
January 05, 2021 / Robert Zehnder

Quickly chunk an array by the specified chunk size.

Cover

Yesterday I ran across an interesting programming challenge: I have an array of 51 widgets and I need to update these widgets on a 3rd party API. The API will only allow me to update 8 widgets at a time so I need to break my array out in to a 2D array of updatable chunks.

I tried solving the problem a few different ways. Being clever caused a complex mess. I dialed back the cleverness a bit and ended up going with this:

// given an array, return an array of arrays with {{chunkSize}} elements
function chunk (required array input, required numeric chunkSize) {
 var output[1] = [];
 var currentChunk = 1;
 input.each((item, index) => {
  output[currentChunk].append(item);
  if(index % chunkSize == 0 && index < input.len()) output[++currentChunk] = [];
 });
 return output;
}

I iterate over the input array, append each item to output, creating a new "bucket" and updating current bucket every chunkSize items unless there are no other elements in the source array.

Is there a more efficient way of handling this?

About Robert Zehnder
Robert is a Senior Lead ColdFusion Engineer. In his spare time he enjoys hanging out with his family, his dog, and working on cool stuff.