locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
72 lines (71 loc) • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.array_chunk = array_chunk;
function array_chunk(input, size, preserveKeys) {
// discuss at: https://locutus.io/php/array_chunk/
// original by: Carlos R. L. Rodrigues (https://www.jsfromhell.com)
// improved by: Brett Zamir (https://brett-zamir.me)
// note 1: Important note: Per the ECMAScript specification,
// note 1: objects may not always iterate in a predictable order
// example 1: array_chunk(['Kevin', 'van', 'Zonneveld'], 2)
// returns 1: [['Kevin', 'van'], ['Zonneveld']]
// example 2: array_chunk(['Kevin', 'van', 'Zonneveld'], 2, true)
// returns 2: [{0:'Kevin', 1:'van'}, {2: 'Zonneveld'}]
// example 3: array_chunk({1:'Kevin', 2:'van', 3:'Zonneveld'}, 2)
// returns 3: [['Kevin', 'van'], ['Zonneveld']]
// example 4: array_chunk({1:'Kevin', 2:'van', 3:'Zonneveld'}, 2, true)
// returns 4: [{1: 'Kevin', 2: 'van'}, {3: 'Zonneveld'}]
if (size < 1) {
return null;
}
const keepKeys = Boolean(preserveKeys);
if (Array.isArray(input)) {
if (keepKeys) {
const chunks = [];
for (const [i, value] of input.entries()) {
const chunkIndex = Math.floor(i / size);
if (!chunks[chunkIndex]) {
chunks[chunkIndex] = {};
}
chunks[chunkIndex][String(i)] = value;
}
return chunks;
}
else {
const chunks = [];
for (const [i, value] of input.entries()) {
const chunkIndex = Math.floor(i / size);
if (!chunks[chunkIndex]) {
chunks[chunkIndex] = [];
}
chunks[chunkIndex].push(value);
}
return chunks;
}
}
else {
const inputEntries = Object.entries(input);
if (keepKeys) {
const chunks = [];
for (const [i, [key, value]] of inputEntries.entries()) {
const chunkIndex = Math.floor(i / size);
if (!chunks[chunkIndex]) {
chunks[chunkIndex] = {};
}
chunks[chunkIndex][key] = value;
}
return chunks;
}
else {
const chunks = [];
for (const [i, [, value]] of inputEntries.entries()) {
const chunkIndex = Math.floor(i / size);
if (!chunks[chunkIndex]) {
chunks[chunkIndex] = [];
}
chunks[chunkIndex].push(value);
}
return chunks;
}
}
}