const isFactorion = (number) => {
  const stringifiedNumber = String(number);
  let total = 0;
  for (let stringDigit of stringifiedNumber) {
    const numericalDigit = Number.parseInt(stringDigit);
    total += singleDigitFactorial(numericalDigit);
  }
  if (number === total) {
    return true;
  }
  return false;
};

const singleDigitFactorial = (digit) => {
  if (digit < 0 || digit > 9 || digit % 1 !== 0) {
    throw new Error('Supplied digit must be an integer from 0-9');
  }
  switch (digit) {
    case 0:
    case 1: return 1;
    case 2: return 2;
    case 3: return 6;
    case 4: return 24;
    case 5: return 120;
    case 6: return 720;
    case 7: return 5040;
    case 8: return 40320;
    case 9: return 362880;
    default: throw new Error('Could not derive factorial from input');
  }

};

for (let i = 0; i < 100000000; i += 1) {
  if (isFactorion(i)) {
    console.log(`${i} is a factorion.`);
  }
}

// 1, 2, 145, 40585