'未定义' Javascript函数中的变量结果

时间:2016-10-26 14:49:59

标签: javascript

我的代码中的某些东西意味着我得到一个打印的数组,其中只包含未定义的值,而不是我期望的随机数。

我的代码如下:



function List(max, min, numLists, numItems) {
    this.max = max,
    this.min = min,
    this.numLists = numLists,
    this.numItems = numItems,
    this.generateLists = function () {
        var fullArray = [];
        var completeArray = [];

        for (i = this.min; i < this.max; i++) {
            fullArray.push(i);
        }
        for (i = 0; i < numItems; i++) {
            var randomItem = Math.floor(Math.random() * (1 + (this.max - this.min)));
            completeArray.push(fullArray[randomItem]);
        }

        console.log(completeArray);
    }
}

var newList = new List(12, 100, 1, 15);

newList.generateLists();
&#13;
&#13;
&#13;

代码应该在最小值和最大值之间打印一个随机数字列表。我得到一个包含15个值的数组,但它们都是未定义的。我猜这意味着我的第一个&#39; for&#39;环?

如果有人对我如何做得更好有任何建议请批评!

提前致谢。

6 个答案:

答案 0 :(得分:1)

您的参数列表中混有minmax。这会导致数字的边界不可能(大于100但小于12)。只需将第一行中的参数从max,min交换为min,max

function List(min,max,numLists,numItems){
    this.max = max,
    this.min = min,
    this.numLists = numLists,
    this.numItems = numItems,
    this.generateLists = function (){
        
        
        var fullArray = [];
        var completeArray = [];
        
        for ( i = this.min ; i<this.max ; i++) {
            fullArray.push(i);
            }
      
        for ( i = 0 ; i<numItems ; i++) { 
            var randomItem = Math.floor(Math.random() * (1+(this.max-this.min)));
            completeArray.push(fullArray[randomItem]);
            }
            
        console.log(completeArray);
        
        }
}
        
var newList = new List ( 12 , 100 , 1,15);

newList.generateLists();

答案 1 :(得分:1)

我认为您在启动newList时会交换max和min的位置。

将行更改为:

var newList = new List ( 100, 12 , 1,15);

然后它应该可以正常工作。

答案 2 :(得分:0)

你正在推动什么都没有的fullArray[randomItem]。它永远不会被初始化

&#13;
&#13;
function List(max, min, numLists, numItems) {
  this.max = max,
    this.min = min,
    this.numLists = numLists,
    this.numItems = numItems,
    this.generateLists = function() {


      var completeArray = [];

      for (i = 0; i < numItems; i++) {
        var randomItem = Math.floor(Math.random() * (1 + (this.max - this.min)));
        completeArray.push(randomItem);
      }

      document.write(completeArray);

    }
}

var newList = new List(12, 100, 1, 15);

newList.generateLists();
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我想也许你的最大和最小论点都是错误的顺序。您尝试使用负索引访问fullArray,因为从较小的索引中减去较大的数字。

function List(min,max,numLists,numItems){
    this.max = max,
    this.min = min,
    this.numLists = numLists,
    this.numItems = numItems,
    this.generateLists = function (){
        
        
        var fullArray = [];
        var completeArray = [];
        
        for ( i = this.min ; i<this.max ; i++) {
            fullArray.push(i);
            }
        for ( i = 0 ; i<numItems ; i++) { 
            var randomItem = Math.floor(Math.random() * (1+(this.max-this.min)));
            console.log(randomItem)
            completeArray.push(fullArray[randomItem]);
            }
            
        console.log(completeArray);
        
        }
}
        
var newList = new List ( 12 , 100 , 1,15);

newList.generateLists();

答案 4 :(得分:0)

我认为max和min参数是交换的

这个

function List(max,min,numLists,numItems){

应该是

function List(min,max,numLists,numItems){

答案 5 :(得分:0)

只需替换此行;

var randomItem = Math.floor(Math.random() * (1+(this.max-this.min)));

用;

var randomItem = Math.floor(Math.random()*(fullArray.length)+1);