Refactor Maths/Factorial for more minimal side effects.

This commit is contained in:
Yosapol Jitrak
2020-10-16 16:31:40 +07:00
parent 90891b5657
commit e0883facdb
2 changed files with 10 additions and 25 deletions

View File

@ -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.'
}
}

View File

@ -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.')