javascript - 数组不按顺序排列

标签 javascript arrays object

我正在尝试为游戏生成一副牌。 为什么我的数组打印出来时顺序不正确? 预期输出:

 [
        {number: 1, suite: "Hearts", points: 1},
        {number: 2, suite: "Hearts", points: 2},
        ...
    ] 

打印出来的结果是:

[
    {number: 2, suite: "Hearts", points: 2},
    {number: 4, suite: "Hearts", points: 4},
    {number: 13, suite: "Clubs", points: 10},
    {number: 5, suite: "Diamonds", points: 5},
    {number: 4, suite: "Spades", points: 4},
    {number: 13, suite: "Diamonds", points: 10},
    ...
]

我不确定这是为什么......我该如何修复订单?

对象数组通常是不按顺序排列的吗?

function generateCards() {
  deck = []
  let i = 1;
  let j = 1;
  for (j = 1; j < 5; j++) {
    let suite = ""
    switch (j) {
      case (1):
        suite = "Hearts"
        break;
      case (2):
        suite = "Diamonds"
        break;
      case (3):
        suite = "Clubs"
        break;
      case (4):
        suite = "Spades"
        break;
    }
    for (i = 1; i < 14; i++) {
      switch (i) {
        case (11):
          points = 10;
          break;
        case (12):
          points = 10;
          break;
        case (13):
          points = 10;
          break;
        default:
          points = i;
          break;
      }
      card = {
        "number": i,
        "suite": suite,
        "points": points
      }
      deck.push(card)
    }
  }
  console.log(deck)
  return deck;
}


generateCards();

最佳答案

这不会解决顺序问题(我无法重现),但会大大缩短您的代码。

function generateCards() {
  const suites = ['Hearts', 'Diamonds', 'Clubs', 'Spades'];
  const deck = []

  for (let j = 0; j < 4; j++) {
    for (let i = 1; i < 14; i++) {
      deck.push({
        number: i,
        suite: suites[j],
        points: i >= 11 ? 10 : i
      });
    }
  }

  return deck;
}


console.log(generateCards());

您甚至可以将其压缩为单个循环:

function generateCards() {
  const suites = ['Hearts', 'Diamonds', 'Clubs', 'Spades'];
  const deck = []

  for (let i = 0; i < 52; i++) {
    const number = i % 13 + 1;
    
    deck.push({
      number,
      suite: suites[i / 13 | 0], // divide by 13 and round down
      points: number >= 11 ? 10 : number
    });
  }

  return deck;
}


console.log(generateCards());

关于javascript - 数组不按顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368779/

相关文章:

javascript - 如何使用 JavaScript 创建字母表排序器?

python - 在 Numpy 或 Pandas 中的每一行之后插入相似行(只有一列发生变化)的有效方法

java - 以不同的方法设置对象

javascript - 使用程序调用返回的数据填充 Javascript 对象

javascript - ASP.NET MVC4 显示模式不加载 TypeScript 输出

javascript - 长数组的对象解构解决方案?

python - 使用列表调用格式函数

javascript - 过滤数组以具有唯一值

javascript - Angular AngularFire2 简单连接

C++ 返回 MyClass* 与 MyClass