From e0883facdb782af176e4897efe043563cabc0eb8 Mon Sep 17 00:00:00 2001 From: Yosapol Jitrak Date: Fri, 16 Oct 2020 16:31:40 +0700 Subject: [PATCH] Refactor Maths/Factorial for more minimal side effects. --- Maths/Factorial.js | 32 ++++++++++---------------------- Maths/test/Factorial.test.js | 3 --- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/Maths/Factorial.js b/Maths/Factorial.js index 04d9ef08c..80daa168b 100644 --- a/Maths/Factorial.js +++ b/Maths/Factorial.js @@ -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.' } } diff --git a/Maths/test/Factorial.test.js b/Maths/test/Factorial.test.js index bd22ad436..31c6cee39 100644 --- a/Maths/test/Factorial.test.js +++ b/Maths/test/Factorial.test.js @@ -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.')