问题描述
洗牌功能
const shuffle =(array) => {
let currentIndex = array.length,temporaryValue,randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
GENERATE CHROMOSOMES(此函数生成一个数组,这些数组从初始的“序列”中随机化)
const generateChromosomes = (numberOfChromosomes) =>{
const result = [];
const sequence = ["2","3","4"];
for(let i = 1; i < numberOfChromosomes; i++){
result.push(shuffle(sequence))
}
return(result);
}
我不知道为什么,每次运行它时,我都没有得到不同的数组。我得到了 50 次相同的结果。当我重新运行代码时,它又给了我 50 倍。
解决方法
很简单,我猜这个问题跟数组引用有关。 将您的序列数组移动到循环中,以便您禁用引用器并通过变量的静态值设置随机播放。
const generateChromosomess = (numberOfChromosomes) => {
const result = [];
for(let i = 1; i < numberOfChromosomes; i++){
const sequence = ["2","3","4"]; // MOVE YOUR ARRAY HERE.
result.push(shuffle(sequence))
}
return(result);
}
有几种方法可以取消数组的引用 - via
JSON.parse(JSON.stringify(value))
或
[...value]
或(通过lodash
)
_.clone(array)