random-js array shuffle总是返回相同的结果

时间:2015-03-22 11:11:17

标签: node.js random-js

我正在使用带有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();
...

感谢

2 个答案:

答案 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;
}