UNPKG

@akwaba/object-extensions

Version:
180 lines (142 loc) 5.08 kB
/** * Returns the number of seconds represented by the given number * * @param {Number} number the number to represent in seconds * @return {Number} the number of seconds represented by the given number */ Number.seconds = (number) => number * 1000; /** * Returns the number of minutes represented by the given number * * @param {Number} number the number to represent in minutes * @return {Number} the number of minutes represented by the given number */ Number.minutes = (number) => 60 * Number.seconds(number); /** * Returns the number of hours represented by the given number * * @param {Number} number the number to represent in hours * @return {Number} the number of hours represented by the given number */ Number.hours = (number) => 60 * Number.minutes(number); /** * Returns the number of days represented by the given number * * @param {Number} number the number to represent in days * @return {Number} the number of days represented by the given number */ Number.days = (number) => 24 * Number.hours(number); /** * Returns the number of weeks represented by the given number * * @param {Number} number the number to represent in weeks * @return {Number} the number of weeks represented by the given number */ Number.weeks = (number) => 7 * Number.days(number); /** * Returns the number of months represented by the given number * * @param {Number} number the number to represent in months * @return {Number} the number of months represented by the given number */ Number.months = (number) => 30 * Number.days(number); /** * Returns the number of years represented by the given number * * @param {Number} number the number to represent in years * @return {Number} the number of years represented by the given number */ Number.years = (number) => 365.25 * Number.days(number); /** * Converts the given number to a date * * @param {Number} number the number (in milliseconds) to convert to date * @return {Date} the date corresponding to the given number */ Number.toDate = (number) => new Date(number); /** * Invokes the given iterator for the specified number of times * * @param {Number} number the number of times to invoke the iterator * @param {Function} iterator the iterator to invoke * @param {Object} context the context for the "this" keyword */ Number.times = (number, iterator, context) => { if (number < 0) { return number; } for (let i = 0; i < number; i++) { iterator.call(context, number, i); } return number; }; /** * Pads the given number with zeros * * @param {Number} number the number to pad * @param {Number} length the total length of the padded string (including the number) * @param {Number} radix the radix to use when converting the number to a string * @return {String} a padded string representation of the given number */ Number.toPaddedString = (number, length, radix = 10) => { const string = number.toString(radix); let padding = ""; Number.times(length - string.length, () => { padding += "0"; }); return `${padding}${string}`; }; /** * Creates a range of numbers to the specified target * * @param {Number} number the initial number in the range * @param {Number} target the target bound of the range * @param {Number} step the step increment or decrement * @return {Array} a range of numbers between the given number and the target */ Number.to = (number, target, step = 1) => { return (number < target) ? Number.upTo(number, target, step) : Number.downTo(number, target, step); }; /** * Creates a range of numbers up to the specified target * * @param {Number} number the initial number in the range * @param {Number} target the upper bound of the range * @param {Number} step the step increment * @return {Array} a range of numbers between the given number and the target */ Number.upTo = (number, target, step = 1) => { if (target <= number || step <= 0) { return number; } const result = []; for (let i = number; i <= target; i += step) { result.push(i); } return result; }; /** * Creates a range of numbers down to the specified target * * @param {Number} number the initial number in the range * @param {Number} target the lower bound of the range * @param {Number} step the step decrement * @return {Array} a range of numbers between the given number and the target */ Number.downTo = (number, target, step = 1) => { if (target >= number || step <= 0) { return number; } const result = []; for (let i = number; i >= target; i -= step) { result.push(i); } return result; }; /** * Returns the ASCII character corresponding to the given number * * @param {Number} number the number for which to return the ASCII character * @return {String} the ASCII character corresponding to the given number */ Number.toChar = (number) => String.fromCharCode(number);