Skip to content

Instantly share code, notes, and snippets.

@sampotts
Last active July 3, 2018 03:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sampotts/6a281c70ae4356512021f12869ea3d38 to your computer and use it in GitHub Desktop.
Save sampotts/6a281c70ae4356512021f12869ea3d38 to your computer and use it in GitHub Desktop.
Find the closest number in an array of numbers, with ceil and floor rounding options
// Rounding methods for .closest()
const closestRounding = {
none: 0,
ceil: 1,
floor: 2,
};
export { closestRounding };
/**
* Get the closest value in an array
* @param {array} array
* @param {number} value
* @param {number} rounding
*/
export function closest(array, value, rounding = closestRounding.none) {
if (!Array.isArray(array) || !array.length) {
return null;
}
return array.reduce((prev, curr) => {
if (Math.abs(curr - value) <= Math.abs(prev - value)) {
switch (rounding) {
case closestRounding.ceil:
return curr >= value ? curr : prev;
case closestRounding.floor:
return curr <= value ? curr : prev;
default:
return curr;
}
}
return prev;
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment