& # 39;未定义# 39;Javascript函数中的变量result

'undefined' result for variable in Javascript function

本文关键字:变量 result Javascript 未定义 函数      更新时间:2023-09-26

代码中的某些内容意味着我正在打印一个仅包含未定义值的数组,而不是我期望的随机数。

我的代码如下:

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();

代码应该打印一个介于最小值和最大值之间的随机数列表。我得到一个包含15个值的数组,但它们都是未定义的。我猜这意味着我的第一个"for"循环有问题?

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

提前感谢。

您的参数列表中混淆了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();

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

将行改为:

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

您正在推送不包含任何内容的fullArray[randomItem]。它从未初始化

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();

我想你的max和min参数顺序不对。您试图访问索引为负的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();

我认为max和min参数交换了

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

应为

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

替换这一行;

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

;

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