我正在使用带有random-js的NodeJS 0.12来重新排列数组。
似乎无论什么时候我洗牌都得到相同的结果,只有当我重新启动应用程序时,结果才会有所不同..只是第一次然后相同,直到我再次重新启动应用程序。
这是我的代码:
var numbers = [1,2,3,4,5...];
var Random = require("random-js");
var random = new Random(Random.engines.mt19937().autoSeed());
function generateBalls() {
var result = random.shuffle(numbers);
return result;
}
任何想法?
更多代码:
这是完整的ballManagement.js文件:
var maxNumber = 75;
var minNumber = 1;
var modNumber = 15;
var letters = ['B', 'I', 'N', 'G', 'O'];
var numbers = [];
var numbersToLetters = {};
var Random = require("random-js");
var random = new Random(Random.engines.mt19937().autoSeed());
for (var i = minNumber; i <= maxNumber; i++) {
numbersToLetters[i] = letters[i % modNumber];
}
for (var i = minNumber; i <= maxNumber; i++) {
numbers.push(i);
}
function generateBalls() {
var result = random.shuffle(numbers);
return result;
}
module.exports.generateBalls = generateBalls;
module.exports.maxNumber = maxNumber;
module.exports.minNumber = minNumber;
module.exports.modNumber = modNumber;
module.exports.letters = letters;
module.exports.numbers = numbers;
然后我只需在以下代码中使用generateBalls函数:
var ballsManagement = require('../models/ballsManagement');
var balls = ballsManagement.generateBalls();
var balls2 = ballsManagement.generateBalls();
...
感谢
答案 0 :(得分:0)
您可以使用纯JS来混洗任何数组,例如,如果您有一个数组,如
var arr = [0, 1, 2, 3, 4];
你可以使用这个JS代码:
var arr = [0, 1, 2, 3, 4];
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
function getItemFromDB(){
var res = ["", "", "", "", ""];
for(var i=0; i<res.length; i++) {
var checker = false;
while(checker == false) {
var newItem = arr[getRandomInt(0, arr.length)];
if (res.indexOf(newItem) < 0) {
res[i] = newItem;
checker = true;
}
}
}
alert(res);
}
这适用于HTML:
<form>
<input type='button' value='Get random array' onclick='getItemFromDB()'/>
</form>
它适合我。
答案 1 :(得分:0)
似乎答案很简单:) shuffle函数修改数组并返回它,它不会复制数组并修改新数组。
所以在我的情况下,我使用了两次随机,所以球和球2都指向已经洗牌两次的同一个数组。
所以在我的情况下,我只是在改组之前创建一个新数组。
function generateBalls() {
var newArr = [];
for (var i=minNumber;i<=maxNumber;i++) {
newArr.push(i);
}
Random.shuffle(engine,newArr);
return newArr;
}