第一次在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);
}
}
感谢您的帮助!
答案 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
且数字从limit
到make_array(size, limit)
的数组:
var size = 10;
var limit = 100;
var array = make_array(size, limit);
以您想要的任何方式获取size
和limit
。来自输入字段或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()
var
,let
或const
定义变量,即使它只是for-loop中的i
inquirer
(0.12.0);保持节点模块最新是一个好主意;最新版本使用Promises而不是回调函数,这样可以更轻松地处理获取用户输入的异步性质