如何从JavaScript数组项的开头删除“undefined”?

时间:2013-03-26 06:36:02

标签: javascript

我正在尝试生成一个随机数字数组,但我在每行的开头都得到“未定义”。我一直在网上搜索了几个小时,但一直无法解决这个问题。

预期输出应为5行2个随机数字,如下所示:

87
57
81
80
02

但实际输出如下:

undefined87
undefined57
undefined81
undefined80
undefined02

这是一个修改过的摘录,产生上面显示的结果:

function NumberSet() {

  // generate all the digits
  this.generate = function() {
    random_digits = [];

    // create 5 rows of 2 random digits
    for(i=0; i<5; i++) {
      for(z=0; z<2; z++) {
        // use .toString() in order to concatenate digits to 
        // the array without adding them together
        random_digit = Math.floor(Math.random()*10).toString();
        random_digits[i] +=random_digit;
      }
    }
    return random_digits;
  }
}
randomnumbers1 = new NumberSet();
mynums = randomnumbers1.generate();
jQuery.each(mynums, function(i, l) {
  // display output in a div#nums
  $('#nums').append(l + '<br>');
});

最终版本不会使用此方法显示数字。我只是想解决“未定义”的来源。

4 个答案:

答案 0 :(得分:1)

初始化变量

 random_digits[i] = "";
 for(z=0; z<2; z++) {
    random_digit = Math.floor(Math.random()*10).toString();
    random_digits[i] +=random_digit;
  }

使用var正确声明变量。

var random_digit, random_digits = [];

答案 1 :(得分:1)

在第一个random_digit循环中声明for并指定一个空字符串。 浏览内部for循环,附加随机数字,然后push()返回外部for循环中的数组。

function NumberSet() {
  // generate all the digits -a meme should be attached here-
  this.generate = function() {
    random_digits = [];

    // create 5 rows of 2 random digits
    for(i=0; i<5; i++) {
      var random_digit = ""; //Declare it out here
      for(z=0; z<2; z++) {
        // use .toString() in order to concatenate digits to 
        // the array without adding them together
        random_digit += Math.floor(Math.random()*10).toString(); //Append it here
      }
      random_digits.push(random_digit); //Push it back here
    }
    return random_digits;
  }
}

Fiddle-dee-dee

或忘记内部循环并使用递归

function NumberSet() {

    // generate all the digits
    this.generate = function () {
        random_digits = [];

        // create 5 rows of 2 random digits

        // Use i for how many numbers you want returned!
        var random_digit = function (i) {
            var getRand = function() {
                return (Math.floor(Math.random() * 10).toString());
            }
            return (i > 0) ? getRand()+random_digit(i-1) : "";
        };

        for (i = 0; i < 5; i++) {
            random_digits.push(random_digit(2)); //In this case, you want 2 numbers
        }
        return random_digits;
    }
}

Fiddle-do-do

最终版本因为我感到无聊

function NumberSet(elNum, numLen) {
    this.random_digits = []; //Random digits array
    this.elNum = elNum; //Number of elements to add to the array
    this.numLen = numLen; //Length of each element in the array
    // generate all the digits

    this.generate = function () {
        // create 5 rows of 2 random digits
        var random_digit = function (i) {
            var getRand = function () {
                return (Math.floor(Math.random() * 10).toString());
            }
            return (i > 0) ? getRand() + random_digit(i - 1) : "";
        };
        for (i = 0; i < this.elNum; i++) {
            this.random_digits.push(random_digit(this.numLen)); 
        }
        return this.random_digits;
    }
}

randomnumbers1 = new NumberSet(5, 2).generate();

jQuery.each(randomnumbers1, function (i, l) {
    // display output in a div#nums
    $('#nums').append(l + '<br>');
});

Fiddle on the roof

答案 2 :(得分:0)

替换

random_digits[i] +=random_digit;

使用

random_digits[i] = (random_digits[i]  == undefined ? '' : random_digits[i]) + random_digit;

演示:Fiddle

答案 3 :(得分:0)

您的功能可以简化为:

function NumberSet() {

  this.generate = function() {
    var random_digits = new Array();

    for (i = 0; i < 5; i++) {
        randnum = Math.floor(Math.random() * 99);
        random_digits[i] = (randnum < 10 ? '0' : 0) + randnum;
    }
    return random_digits;
  }
}

Live Demo