You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.4 KiB
50 lines
1.4 KiB
var baseSlice = require('./_baseSlice'), |
|
isIterateeCall = require('./_isIterateeCall'), |
|
toInteger = require('./toInteger'); |
|
|
|
/* Built-in method references for those with the same name as other `lodash` methods. */ |
|
var nativeCeil = Math.ceil, |
|
nativeMax = Math.max; |
|
|
|
/** |
|
* Creates an array of elements split into groups the length of `size`. |
|
* If `array` can't be split evenly, the final chunk will be the remaining |
|
* elements. |
|
* |
|
* @static |
|
* @memberOf _ |
|
* @since 3.0.0 |
|
* @category Array |
|
* @param {Array} array The array to process. |
|
* @param {number} [size=1] The length of each chunk |
|
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. |
|
* @returns {Array} Returns the new array of chunks. |
|
* @example |
|
* |
|
* _.chunk(['a', 'b', 'c', 'd'], 2); |
|
* // => [['a', 'b'], ['c', 'd']] |
|
* |
|
* _.chunk(['a', 'b', 'c', 'd'], 3); |
|
* // => [['a', 'b', 'c'], ['d']] |
|
*/ |
|
function chunk(array, size, guard) { |
|
if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { |
|
size = 1; |
|
} else { |
|
size = nativeMax(toInteger(size), 0); |
|
} |
|
var length = array == null ? 0 : array.length; |
|
if (!length || size < 1) { |
|
return []; |
|
} |
|
var index = 0, |
|
resIndex = 0, |
|
result = Array(nativeCeil(length / size)); |
|
|
|
while (index < length) { |
|
result[resIndex++] = baseSlice(array, index, (index += size)); |
|
} |
|
return result; |
|
} |
|
|
|
module.exports = chunk;
|
|
|