30 lines
748 B
JavaScript
30 lines
748 B
JavaScript
|
/**
|
||
|
* An implementation of `_.uniq` optimized for sorted arrays without support
|
||
|
* for callback shorthands and `this` binding.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {Array} array The array to inspect.
|
||
|
* @param {Function} [iteratee] The function invoked per iteration.
|
||
|
* @returns {Array} Returns the new duplicate-value-free array.
|
||
|
*/
|
||
|
function sortedUniq(array, iteratee) {
|
||
|
var seen,
|
||
|
index = -1,
|
||
|
length = array.length,
|
||
|
resIndex = -1,
|
||
|
result = [];
|
||
|
|
||
|
while (++index < length) {
|
||
|
var value = array[index],
|
||
|
computed = iteratee ? iteratee(value, index, array) : value;
|
||
|
|
||
|
if (!index || seen !== computed) {
|
||
|
seen = computed;
|
||
|
result[++resIndex] = value;
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
module.exports = sortedUniq;
|