无法按需返回数组

时间:2017-05-05 09:19:23

标签: javascript arrays

第一次在StackExchange上。我最近进入编程,因此我正在学习JavaScript。我试图用一些随机数得到一个n大小的数组,这样我以后可以尝试排序和搜索算法并检查什么是有效的。

我可能会遗漏一些非常容易的东西,但是昨天尝试了这个我仍然无法理解错误的位置。我得到一个空数组。

我正在使用询问者0.12.0,

var inquirer = require('inquirer');

// CONSTRUCT ARRAY WITH n SIZE n OF RANDOM NUMBERS
var value;
var limit;

var  questionRandomSize = [{
  type: 'input',
  name: 'randomsize',
  message: 'Input number for maximum random number.',
  validate: function (limit) {
    if (limit > 0) {
      return true;
    } else {
      return 'Input a number if you want to continue.'
    }
  }
}];

var questionArraySize = [{
  type: 'input',
  name: 'arraysize',
  message: 'Input number for array size.',
  validate: function (value) {
    if (value > 0) {
      return true;
    } else {
      return 'Input a number if you want to continue.';
    }
  }
}];

var nArray = new Array();

function arrayI(value) {
  for (i = 0; i < value; i++) {
    nArray.push(randomSize(limit));
    arrayI(value);
  };
}

inquirer.prompt(questionRandomSize, function (limit) {
  function randomSize(limit) {
    return Math.floor(Math.random() * limit);
  }
  inquirer.prompt(questionArraySize, function (value) {
    arrayI(value);
    mainMenu();
  });
});

//MENU
function mainMenu() {
  if (nArray.lenght === value){
    console.log(nArray);
  } else {
    arrayI(value);
  }
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!看起来您希望生成具有指定限制的随机数的特定大小的数组。

您的问题不依赖于inquirer库,请从问题中删除此冗余代码。

对于解决方案,请尝试创建一个返回所需数组的清除函数。

function make_array(size, limit){

    // Makes an empty array
    var a = [];

    // Does what's inside (size) times
    for(var i = 0; i < size; i++){

        // Generates a random number between 0 and (limit)
        // Pushes into the array.
        a.push(Math.floor(Math.random() * (limit + 1)));

    }

    // Returns the array
    return a;

}

实际上是4行。您可以通过调用size获取大小为0且数字从limitmake_array(size, limit)的数组:

var size  = 10;
var limit = 100;
var array = make_array(size, limit);

以您想要的任何方式获取sizelimit。来自输入字段或prompt()。 祝你好运!

答案 1 :(得分:0)

您的代码中存在许多错误,我在此处创建了一个可用的版本:

var inquirer = require('inquirer');

var questionRandomSize = [{
    type: 'input',
    name: 'randomsize',
    message: 'Input number for maximum random number.',
    validate: function (limit) {
        if (limit > 0) {
            return true;
        } else {
            return 'Input a number if you want to continue.'
        }
    }
}];

var questionArraySize = [{
    type: 'input',
    name: 'arraysize',
    message: 'Input number for array size.',
    validate: function (value) {
        if (value > 0) {
            return true;
        } else {
            return 'Input a number if you want to continue.';
        }
    }
}];

var nArray = [];

function arrayI(limit, size) {
    for (var i = 0; i < size; i++) {
        nArray.push(randomSize(limit));
    }
}

function randomSize(limit) {
    return Math.floor(Math.random() * limit);
}

inquirer.prompt(questionRandomSize, function (limit) {
    inquirer.prompt(questionArraySize, function (size) {
        arrayI(limit.randomsize, size.arraysize);
        mainMenu();
    });
});

//MENU
function mainMenu() {
    console.log('array', nArray);
}

示例输出:

? Input number for maximum random number. 2
? Input number for array size. 4
array [ 0, 1, 0, 1 ]

我修复了一些错误:

  • 您假设prompt的返回值是用户输入的值,但它实际上是一个包含值作为属性的对象
  • 您的randomSize函数属于回调函数范围,因此arrayI函数无法访问
  • arrayI函数中,您递归调用了arrayI函数,这没有任何意义

其他说明:

  • 您应该使用[]创建数组,而不是new Array()
  • 始终确保使用varletconst定义变量,即使它只是for-loop中的i
  • 您使用的是过期版本的inquirer(0.12.0);保持节点模块最新是一个好主意;最新版本使用Promises而不是回调函数,这样可以更轻松地处理获取用户输入的异步性质