jsonMartin
6/28/2016 - 6:26 PM

digitsToLetters_fixed.js

/**
 * Created by jsonmartin on 6/27/16.
 */
"use strict";

function digitsToNumbers(inputStr) {
  if(!inputStr) return []; // Edge case handling, catches for empty inputStr

  const digitMaps = {
    '2': ['A', 'B', 'C'],
    '3': ['D', 'E', 'F'],
    '4': ['G', 'H', 'I'],
    '5': ['J', 'K', 'L'],
    '6': ['M', 'N', 'O'],
    '7': ['P', 'Q', 'R', 'S'],
    '8': ['T', 'U', 'V'],
    '9': ['W', 'X', 'Y', 'Z']
  };

  let results = [];

  let possibilityArray = inputStr.split('').map((n) => digitMaps[n]);

  let mapDigits = (current, remaining) => {
    if (remaining.length === 1) {
      let letters = remaining[0];
      letters.forEach((letter) => results.push(current + letter));
      return;
    }

    remaining[0].forEach((letter) => mapDigits(current + letter, remaining.slice(1)));
  };

  mapDigits("", possibilityArray);

  return results;
}

/**
 * TESTS
 */

let result;
//result = digitsToNumbers("2"); // => ['A', 'B', 'C']
result = digitsToNumbers("23"); // => ['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF']
//result = digitsToNumbers("234");
//result = digitsToNumbers("999");

console.log(result);