Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
47 lines (44 sloc)
1.21 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Creates a slice of `array` from `start` up to, but not including, `end`. | |
* | |
* **Note:** This method is used instead of | |
* [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are | |
* returned. | |
* | |
* @since 3.0.0 | |
* @category Array | |
* @param {Array} array The array to slice. | |
* @param {number} [start=0] The start position. A negative index will be treated as an offset from the end. | |
* @param {number} [end=array.length] The end position. A negative index will be treated as an offset from the end. | |
* @returns {Array} Returns the slice of `array`. | |
* @example | |
* | |
* var array = [1, 2, 3, 4] | |
* | |
* _.slice(array, 2) | |
* // => [3, 4] | |
*/ | |
function slice(array, start, end) { | |
let length = array == null ? 0 : array.length | |
if (!length) { | |
return [] | |
} | |
start = start == null ? 0 : start | |
end = end === undefined ? length : end | |
if (start < 0) { | |
start = -start > length ? 0 : (length + start) | |
} | |
end = end > length ? length : end | |
if (end < 0) { | |
end += length | |
} | |
length = start > end ? 0 : ((end - start) >>> 0) | |
start >>>= 0 | |
let index = -1 | |
const result = new Array(length) | |
while (++index < length) { | |
result[index] = array[index + start] | |
} | |
return result | |
} | |
export default slice |