Consolidate max and min modules.

This commit is contained in:
John-David Dalton
2017-01-11 00:03:28 -08:00
parent 6c54ae2ae5
commit 401c0f053c
5 changed files with 74 additions and 56 deletions

View File

@@ -1,34 +0,0 @@
import isSymbol from './isSymbol.js';
/**
* The base implementation of methods like `max` and `min` which accepts a
* `comparator` to determine the extremum value.
*
* @private
* @param {Array} array The array to iterate over.
* @param {Function} iteratee The iteratee invoked per iteration.
* @param {Function} comparator The comparator used to compare values.
* @returns {*} Returns the extremum value.
*/
function baseExtremum(array, iteratee, comparator) {
let result;
let index = -1;
const length = array.length;
while (++index < length) {
let computed;
const value = array[index];
const current = iteratee(value);
if (current != null && (computed === undefined
? (current === current && !isSymbol(current))
: comparator(current, computed)
)) {
computed = current;
result = value;
}
}
return result;
}
export default baseExtremum;

24
max.js
View File

@@ -1,6 +1,4 @@
import baseExtremum from './.internal/baseExtremum.js';
import baseGt from './.internal/baseGt.js';
import identity from './identity.js';
import isSymbol from './isSymbol.js';
/**
* Computes the maximum value of `array`. If `array` is empty or falsey,
@@ -19,9 +17,23 @@ import identity from './identity.js';
* // => undefined
*/
function max(array) {
return (array && array.length)
? baseExtremum(array, identity, baseGt)
: undefined;
let result;
let index = -1;
const length = array ? array.length : 0;
while (++index < length) {
let computed;
const value = array[index];
if (value != null && (computed === undefined
? (value === value && !isSymbol(value))
: (value > computed)
)) {
computed = value;
result = value;
}
}
return result;
}
export default max;

View File

@@ -1,5 +1,4 @@
import baseExtremum from './.internal/baseExtremum.js';
import baseGt from './.internal/baseGt.js';
import isSymbol from './isSymbol.js';
/**
* This method is like `max` except that it accepts `iteratee` which is
@@ -19,9 +18,24 @@ import baseGt from './.internal/baseGt.js';
* // => { 'n': 2 }
*/
function maxBy(array, iteratee) {
return (array && array.length)
? baseExtremum(array, iteratee, baseGt)
: undefined;
let result;
let index = -1;
const length = array ? array.length : 0;
while (++index < length) {
let computed;
const value = array[index];
const current = iteratee(value);
if (current != null && (computed === undefined
? (current === current && !isSymbol(current))
: (current > computed)
)) {
computed = current;
result = value;
}
}
return result;
}
export default maxBy;

24
min.js
View File

@@ -1,6 +1,4 @@
import baseExtremum from './.internal/baseExtremum.js';
import baseLt from './.internal/baseLt.js';
import identity from './identity.js';
import isSymbol from './isSymbol.js';
/**
* Computes the minimum value of `array`. If `array` is empty or falsey,
@@ -19,9 +17,23 @@ import identity from './identity.js';
* // => undefined
*/
function min(array) {
return (array && array.length)
? baseExtremum(array, identity, baseLt)
: undefined;
let result;
let index = -1;
const length = array ? array.length : 0;
while (++index < length) {
let computed;
const value = array[index];
if (value != null && (computed === undefined
? (value === value && !isSymbol(value))
: (value < computed)
)) {
computed = value;
result = value;
}
}
return result;
}
export default min;

View File

@@ -1,5 +1,4 @@
import baseExtremum from './.internal/baseExtremum.js';
import baseLt from './.internal/baseLt.js';
import isSymbol from './isSymbol.js';
/**
* This method is like `min` except that it accepts `iteratee` which is
@@ -19,9 +18,24 @@ import baseLt from './.internal/baseLt.js';
* // => { 'n': 1 }
*/
function minBy(array, iteratee) {
return (array && array.length)
? baseExtremum(array, iteratee, baseLt)
: undefined;
let result;
let index = -1;
const length = array ? array.length : 0;
while (++index < length) {
let computed;
const value = array[index];
const current = iteratee(value);
if (current != null && (computed === undefined
? (current === current && !isSymbol(current))
: (current < computed)
)) {
computed = current;
result = value;
}
}
return result;
}
export default minBy;