如何解决Shuffle an Array 在 Javascript 中给出相同的值
洗牌功能
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。