Javascript 是否有一种方法可以随机重新排列数组,使数组每次都以不同的方式显示?

Javascript 是否有一种方法可以随机重新排列数组,使数组每次都以不同的方式显示?,javascript,arrays,sorting,Javascript,Arrays,Sorting,var-arr=[1,2,3,4]; finalarr=[]; 对于(i=0;i您只需在按下之前取消对arr的引用。以下三种方法中的任何一种都可以 var-arr=[1,2,3,4]; finalarr=[]; 对于(i=0;iYes),可以使用javascript数组随机洗牌函数随机洗牌数组 就像你的代码一样 var arr=[1,2,3,4] finalarr = []; var shuffle_arr=shuffle(arr); finalarr.push(shuffle_arr);

var-arr=[1,2,3,4];
finalarr=[];

对于(i=0;i您只需在按下之前取消对
arr
的引用。以下三种方法中的任何一种都可以

var-arr=[1,2,3,4];
finalarr=[];

对于(i=0;iYes),可以使用javascript数组随机洗牌函数随机洗牌数组

就像你的代码一样

var arr=[1,2,3,4]
finalarr = [];
var shuffle_arr=shuffle(arr);
finalarr.push(shuffle_arr);
只需使用
shuffle
功能。

编辑 第二个演示被修改为接受两个参数:

@Params: array [Array]...: The array to shuffle
        repeat [Number]..: The number of new randomized arrays to be returned

@Return: An array of arrays (aka "two-dimensional array") 

如所述,您使用的是对数组的引用,再加上您的结果是一个完整数组,其中您添加到一个空数组中(例如,
[[4,3,2,1]]
),更实际的返回将只是一个数组,它的元素与原始数组相同,但顺序是随机的(
[2,4,1,3]

以下演示:

  • 使用最有效的方法洗牌数组:

  • 接受标准数组并通过
    […数组]

  • shuffle()
    函数被分别调用三次,并以随机顺序返回一个新数组

  • 注意:有一个可选的实用程序功能,可以更好地显示控制台日志。这不是必需的

    演示1
    let array=[1,2,3',A',B',C'];
    常量洗牌=([…数组])=>{
    设i=0;
    设j=0;
    设temp=null;
    对于(i=array.length-1;i>0;i-=1){
    j=数学地板(数学随机()*(i+1));
    温度=阵列[i];
    数组[i]=数组[j];
    数组[j]=温度;
    }
    返回数组;
    }
    const log=data=>console.log(JSON.stringify(data));
    日志(洗牌(数组));
    日志(洗牌(数组));
    
    log(shuffle(array));
    将数组文本附加到排序函数,并将结果推送到最终数组

    让finalarr=[]
    
    对于(i=0;i这里的问题是,您正在为每个索引向同一个数组添加一个。它们不都是自己的数组-它们都是完全相同的数组。假设有两个新闻播音员,每个播音员都在报道同一个故事。如果故事发生变化,两个新闻播音员都会告诉您相同的更新。这就是这些数组所做的。当您说某件事时就像arr1=arr2一样,您只是说arr1现在是同一个故事/值的新闻播音员-因此更改与其中一个相关联的值会更改这两个值,而对其中一个值进行混洗会同时对这两个值进行混洗。要更改这一点,您需要在将数组分配给新变量之前克隆数组

    更改:

    finalarr.push(arr);
    
    致:

    在阵列上使用是一种方法,可以克隆阵列的一部分(这对于您的代码来说足够了),因此每一部分实际上都是它自己的值。请在此处运行此新版本的代码:
    var-arr=[1,2,3,4];
    finalarr=[];
    
    对于(i=0;我这样做是为了回答你的问题吗?你在推一个数组的引用,所以每次你洗牌你的数组时,它都会在你的
    finalarr
    中洗牌。你可以制作一个数组的副本,然后推它
    finalarr.push([…arr].sort…
    。而且,洗牌方法不是很随机的。“…一旦它将第一个数组随机化,它就会不断重复它"多少次,在什么类型的数据结构中?如果你没有完全掌握标准数组,嵌套数组很难发挥作用。作为一个答案,包含
    shuffle
    代码可能更为有益。谢谢你的帮助,非常感谢。你能解释一下这个答案是如何被接受的吗?他没有包含任何shuffle代码或者任何解决根本问题的方法谢谢你Geetantji,非常感谢!谢谢你,symlink!非常感谢你的帮助他们都很好!非常感谢你的帮助,zer00ne,我完成后会与你分享我的项目。谢谢,脚本确实有效,但如果我使用其他人的脚本,它不是个人项目。真的吗感谢您的帮助!所有来自加拿大哈比的爱都会帮助我们!感谢您抽出时间为我们留下评论,并标记一个可接受的答案。
    finalarr.push(arr.slice(0));