angvillar
angvillar

Reputation: 1094

getting undefined from recursive function in javascript

I was about one hour trying to figure out why i am getting undefined from this function, the function works well, it stops when the condition triggers and the value of the randomAlphabet is correct, sure is a stupid bug but it makes me feel very annoying. Here is the code:

(function() {

  var getAlphabet = function() {
    var alphabet = [];
    for ( var asciiCode = 97; asciiCode < 123; asciiCode++ ) {
      alphabet.push(String.fromCharCode(asciiCode));
    }
    return alphabet;
  };

  var getRandomAlphabet = function(alphabet, randomAlphabet) {

    var alphabet = alphabet || getAlphabet();
    var alphabetLength = alphabet.length;
    var randomAlphabet = randomAlphabet || [];

    if ( alphabetLength === 0 ) {
      return randomAlphabet;
    };

    var getRandomIndex = function(min, max) {
      return Math.floor(Math.random() * (max - min) + min);
    };

    // remove the random item from the original alphabet
    var randomIndex = getRandomIndex(0, alphabetLength);
    var randomItem = alphabet.splice(randomIndex, 1)[0]; 

    // add the random item to the random alphabet
    randomAlphabet = randomAlphabet.concat(randomItem);

    getRandomAlphabet(alphabet, randomAlphabet);

  };

  // this returns undefined
  console.log(getRandomAlphabet()); 

})();

Upvotes: 0

Views: 53

Answers (1)

Vaibhav
Vaibhav

Reputation: 1477

Only thing is you need to return the getRandomAlphabet method

(function() {

  var getAlphabet = function() {
    var alphabet = [];
    for ( var asciiCode = 97; asciiCode < 123; asciiCode++ ) {
      alphabet.push(String.fromCharCode(asciiCode));
    }
    return alphabet;
  };

  var getRandomAlphabet = function(alphabet, randomAlphabet) {

    var alphabet = alphabet || getAlphabet();
    var alphabetLength = alphabet.length;
    var randomAlphabet = randomAlphabet || [];

    if ( alphabetLength === 0 ) {
      return randomAlphabet;
    };

    var getRandomIndex = function(min, max) {
      return Math.floor(Math.random() * (max - min) + min);
    };

    // remove the random item from the original alphabet
    var randomIndex = getRandomIndex(0, alphabetLength);
    var randomItem = alphabet.splice(randomIndex, 1)[0]; 

    // add the random item to the random alphabet
    randomAlphabet = randomAlphabet.concat(randomItem);

    return getRandomAlphabet(alphabet, randomAlphabet);

  };

  // this returns undefined
  console.log(getRandomAlphabet()); 

})();

Upvotes: 2

Related Questions