UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

72 lines (71 loc) 2.72 kB
"use strict"; 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; } } }