洗牌数组在Javascript中给出相同的值

洗牌数组在Javascript中给出相同的值,javascript,arrays,sorting,random,shuffle,Javascript,Arrays,Sorting,Random,Shuffle,我正在制作一个随机数组生成器,将一个初始数组多次洗牌 洗牌功能 const shuffle =(array) => { let currentIndex = array.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1;

我正在制作一个随机数组生成器,将一个初始数组多次洗牌

洗牌功能

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;
}
生成染色体(此函数生成从初始序列随机化而来的一组数组“序列”)

const generateChromosomes=(染色体数)=>{
常量结果=[];
常量序列=[“2”、“3”、“4”];
for(设i=1;i

我不知道为什么,每次运行它时,都没有得到不同的数组。我得到50倍于同一个。当我重新运行代码时,它会给我另一个代码的50倍。

很简单,我猜这个问题与数组引用有关。 将序列数组移动到循环中,以便禁用referer并通过变量的静态值设置洗牌

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);
}

或(通过
lodash


JSON.parse(JSON.stringify(anything))
很少有用。但是仍然可以安全使用,并且在任何浏览器中都支持。它是安全的,除非数组或对象包含对
JSON.stringify()
不会触及的对象的引用,例如日期实例或函数,或者如果源对象具有循环引用。谢谢,这就解决了问题
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);
}
JSON.parse(JSON.stringify(value))
[...value]
_.clone(array)