首页 > 解决方案 > 在循环中不重复数组的数组随机值

问题描述

如何使用 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
}
....

标签: javascriptarraysobjectrandomarrayobject

解决方案


Javascript 中数组的标准洗牌似乎是 Fisher-yates 洗牌 -从这个答案

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

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

let arrRand = shuffle(arr);
console.log(arrRand);

function shuffle(array) {
  let currentIndex = array.length;
  let temporaryValue;
  let randomIndex;

  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}


推荐阅读