如何在javascript中定义多个数组

如何在javascript中定义多个数组,javascript,arrays,Javascript,Arrays,我这里有一些代码: 首先是一个简单的随机发生器和一个数组选择函数: function Rand(min, max) { return parseFloat(Math.floor(Math.random() * max - min + 1))) + parseFloat(min); } function Choose(arr) { //Returns an element from an array at random. return arr[Math.floor(Math.rand

我这里有一些代码: 首先是一个简单的随机发生器和一个数组选择函数:

function Rand(min, max) {
  return parseFloat(Math.floor(Math.random() * max - min + 1))) + parseFloat(min);
}

function Choose(arr) {
  //Returns an element from an array at random.
  return arr[Math.floor(Math.random() * arr.length)];
}
第二个是洗牌器:

function CardDeck() {
  var Cd = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"];
  var H = [];
  var S = [];
  var D = [];
  var C = [];
  var Result = [];
  var Dk = document.getElementById("Deck Count").value;

  for (i = 0; i < Cd.length; i++) {
    S[i] = Cd[i] + " of Spades";
    H[i] = Cd[i] + " of Hearts";
    C[i] = Cd[i] + " of Clubs";
    D[i] = Cd[i] + " of Diamonds";
  }

  if (Dk == "4") {
    P = S.concat(C, D, H);
  } else if (Dk == "5") {
    var St = [];
    for (i = 0; i < Cd.length; i++) {
      St[i] = Cd[i] + " of Stars";
    }
    P = S.concat(C, D, H, St);
  } else if (Dk == "6") {
    var Rk = [];
    var Wh = [];
    for (i = 0; i < Cd.length; i++) {
      Rk[i] = Cd[i] + " of Rackets";
      Wh[i] = Cd[i] + " of Wheels";
    }
    P = S.concat(C, D, H, Rk, Wh);
  }

  for (i = 0; i < Dk * Cd.length; i++) {
    var Q = Choose(P);
    R = P.indexOf(Q);
    Result[i] = (i + 1) + ": " + Q;
    P = P.slice(0, R).concat(P.slice(R + 1));
  }

  document.getElementById("Cards").innerHTML = Result.join("\n");
}
函数CardDeck(){
变量Cd=[“Ace”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”];
var H=[];
var S=[];
var D=[];
var C=[];
var结果=[];
var Dk=document.getElementById(“甲板计数”).value;
对于(i=0;i
有没有一种简单的方法可以使这个过程更快,或者至少可以更快地声明数组,而不仅仅是执行a=[],b=[。。。对于每一个as来说,这都是非常耗时和乏味的


另外,有没有一种方法可以在基本JS中获得一个周期更长的更好的RNG(没有库,因为它是在基本JS上构建的)

您可以避免像这样反复键入
var
var H=[],S=[],D=[],C=[]但除此之外,很难比现有的更简洁。

您可以执行以下操作:声明一个数组根,然后在for循环中声明许多子数组:

var arrays = [];
var nmbOfAr = 20;
for(int i = 0; i < nmbOfAr; i++){
    arrays[i] = [];
}
var数组=[];
var nmbOfAr=20;
for(int i=0;i
如果将套装名称存储在另一个数组中,则会消除许多变量;然后使用
apply
concat
可以一次将它们全部输入
Result

function CardDeck() {
  var Cd = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"];
  var Result = [];
  var Dk = document.getElementById("Deck Count").value;

  // Put the suit names into a new array
  var suitNames = [" of Spades", " of Hearts", " of Clubs", " of Diamonds"];
  if (Dk == "5") {
    suitNames.push(" of Stars");
  } else if (Dk == "6") {
    suitNames.push(" of Rackets");
    suitNames.push(" of Wheels");
  }

  // Create all suit stacks as an array of arrays
  var suits = [];
  for (var i = 0; i < Cd.length; i++) {
    for(var j = 0; j < suitNames.length; j++) {
        if(i===0) suits.push([]);
        suits[j].push(Cd[i] + suitNames[j]);
    }
  }

  // Combine all cards into a single array
  var P = Array.prototype.concat.apply([], suits);

  // Shuffle the deck
  for (i = 0; i < P.length; i++) {
    var Q = Choose(P);
    R = P.indexOf(Q);
    Result[i] = (i + 1) + ": " + Q;
    P = P.slice(0, R).concat(P.slice(R + 1));
  }

  document.getElementById("Cards").innerHTML = Result.join("\n");

}
函数CardDeck(){
变量Cd=[“Ace”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”];
var结果=[];
var Dk=document.getElementById(“甲板计数”).value;
//将套装名称放入一个新数组
var suitNames=[“黑桃的”、“红桃的”、“梅花的”、“钻石的”];
如果(Dk=“5”){
suitNames.push(“明星”);
}否则,如果(Dk==“6”){
suitNames.推(“球拍”);
SuiteNames.推动(“车轮”);
}
//将所有套装堆叠创建为阵列阵列
var=[];
对于(变量i=0;i
下面是一个运行示例:


这更接近你想要的吗?

使用ES6,我认为我们可以做一些细微的改进

let {S, H, C, D} = Cd.reduce((state, cardType, idx) => {
  state.S.push(cardType + ' of Spades');
  state.H.push(cardType + ' of Hearts');
  state.C.push(cardType + ' of Clubs');
  state.C.push(cardType + ' of Diamonds');
  return state;   
}, {
  S: [],
  H: [],
  C: [],
  D: [],
});

它不一定更快,但使用具有这些数组的对象作为属性或使用数组数组可能更方便。是的,这非常完美,因为它还允许同时制作多套套装!非常感谢。