Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组随机值而不在循环中重复数组_Javascript_Arrays_Object_Random_Arrayobject - Fatal编程技术网

Javascript 数组随机值而不在循环中重复数组

Javascript 数组随机值而不在循环中重复数组,javascript,arrays,object,random,arrayobject,Javascript,Arrays,Object,Random,Arrayobject,如何使用JavaScript循环遍历数组中的所有条目?我有一个数组,我希望在arrRand变量中有另一个随机列表数组,然后执行进一步的代码 list1 = ['aceClub', 'twoClub']; list2 = ['fourDiamond', 'aceClub', 'fourHeart', 'twoDiamond']; list3 = ['aceHeart', 'aceClub', 'aceHeart', 'aceDiamond']; list4 = ['aceDiamond',

如何使用JavaScript循环遍历数组中的所有条目?我有一个数组,我希望在arrRand变量中有另一个随机列表数组,然后执行进一步的代码

 list1 = ['aceClub', 'twoClub'];
 list2 = ['fourDiamond', 'aceClub', 'fourHeart', 'twoDiamond'];
 list3 = ['aceHeart', 'aceClub', 'aceHeart', 'aceDiamond'];
 list4 = ['aceDiamond', 'fourSpade', 'twoClub', 'fourHeart'];
 list5 = ['fourClub', 'twoSpade' , 'twoHeart', 'aceDiamond'];
 list6 = ['twoHeart', 'twoDiamond' , 'twoSpade' , 'aceClub'];

 var arr = [list1,list2,list3,list4, list5,list6];
我想要一组随机数

var arrRand = [list5,list6,list2,list4, list3,list1];
var arrRand = [list3,list2,list6,list5, list1,list4];
var arrRand = [list1,list5,list2,list4, list6,list2];

然后

if(arrRand[0] == list1){
   //mycode 
}
if(arrRand[1] == list2){
  //myCode
}
....

我想你要做的是洗牌数组。您可以使用
排序
方法和随机生成的数字作为比较函数:

 list1 = ['aceClub', 'twoClub'];
 list2 = ['fourDiamond', 'aceClub', 'fourHeart', 'twoDiamond'];
 list3 = ['aceHeart', 'aceClub', 'aceHeart', 'aceDiamond'];
 list4 = ['aceDiamond', 'fourSpade', 'twoClub', 'fourHeart'];
 list5 = ['fourClub', 'twoSpade' , 'twoHeart', 'aceDiamond'];
 list6 = ['twoHeart', 'twoDiamond' , 'twoSpade' , 'aceClub'];

 var arr = [list1,list2,list3,list4, list5,list6];

 const shuffle = arr => arr.sort(() => Math.random() - 0.5);

 console.log(shuffle(arr))   //different array order on each fn call
 console.log(shuffle(arr))
 ...

Javascript中数组的标准洗牌似乎是Fisher-yates洗牌-

let list1=['aceClub','twoClub'];
让列表2=['fourDiamond'、'aceClub'、'fourHeart'、'twoDiamond'];
让列表3=['acehart','aceClub','acehart','acedmond'];
让列表4=['Acedmond'、'fourSpade'、'twoClub'、'fourHeart'];
让列表5=['fourClub'、'twoSpade'、'twoHeart'、'acedmond'];
让列表6=['twoHeart','twoDiamond','twoSpade','aceClub'];
设arr=[list1,list2,list3,list4,list5,list6];
设arrRand=shuffle(arr);
控制台日志(arrRand);
函数洗牌(数组){
让currentIndex=array.length;
让时间价值;
随机指数;
而(0!==currentIndex){
randomIndex=Math.floor(Math.random()*currentIndex);
currentIndex-=1;
临时值=数组[currentIndex];
数组[currentIndex]=数组[randomIndex];
数组[randomIndex]=临时值;
}
返回数组;

}
排序(()=>Math.random()-0.5)
不是特别随机的。它将倾向于使第一个元素更接近front@Light这取决于随机数的输出。我还检查了一些样品,结果还可以。正如你所说的,Fisher-Yates shuffle方法是标准的、更准确的方法。这一个更简洁,可以用于精度要求较低的解决方案。公平地说,我可能太学究了。这确实是更好的方法!