0

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

预期的输出应该是 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

4 回答 4

2

初始化变量

 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 = [];
于 2013-03-26T06:44:12.610 回答
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;
  }
}

提琴迪迪

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

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;
    }
}

小提琴做做

和最终版本,因为我很无聊

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>');
});

屋顶上的小提琴

于 2013-03-26T06:47:43.823 回答
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

于 2013-03-26T06:53:44.037 回答
0

代替

random_digits[i] +=random_digit;

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

演示:小提琴

于 2013-03-26T06:40:37.443 回答