mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
Refactor Maths/Factorial for more minimal side effects.
This commit is contained in:
@ -14,36 +14,24 @@
|
||||
'use strict'
|
||||
|
||||
const calcRange = (num) => {
|
||||
// Generate a range of numbers from 1 to `num`.
|
||||
let i = 1
|
||||
const range = []
|
||||
while (i <= num) {
|
||||
range.push(i)
|
||||
i += 1
|
||||
}
|
||||
return range
|
||||
return [...Array(num).keys()].map(i => i + 1);
|
||||
}
|
||||
|
||||
const calcFactorial = (num) => {
|
||||
let factorial
|
||||
const range = calcRange(num)
|
||||
|
||||
// Check if the number is negative, positive, null, undefined, or zero
|
||||
if (num < 0) {
|
||||
return 'Sorry, factorial does not exist for negative numbers.'
|
||||
}
|
||||
if (num === null || num === undefined) {
|
||||
return 'Sorry, factorial does not exist for null or undefined numbers.'
|
||||
if (num > 0) {
|
||||
const range = calcRange(num)
|
||||
const factorial = range.reduce((a, c) => a * c, 1);
|
||||
return `The factorial of ${num} is ${factorial}`
|
||||
}
|
||||
if (num === 0) {
|
||||
return 'The factorial of 0 is 1.'
|
||||
}
|
||||
if (num > 0) {
|
||||
factorial = 1
|
||||
range.forEach(function (i) {
|
||||
factorial = factorial * i
|
||||
})
|
||||
return `The factorial of ${num} is ${factorial}`
|
||||
if (num < 0) {
|
||||
return 'Sorry, factorial does not exist for negative numbers.'
|
||||
}
|
||||
if (!num) {
|
||||
return 'Sorry, factorial does not exist for null or undefined numbers.'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,6 @@
|
||||
import { calcFactorial } from '../Factorial'
|
||||
|
||||
describe('calcFactorial', () => {
|
||||
it('is a function', () => {
|
||||
expect(typeof calcFactorial).toEqual('function')
|
||||
})
|
||||
|
||||
it('should return a statement for value "0"', () => {
|
||||
expect(calcFactorial(0)).toBe('The factorial of 0 is 1.')
|
||||
|
Reference in New Issue
Block a user