按Javascript中其他数组的值排序数组?

时间:2014-01-23 17:36:22

标签: javascript arrays sorting

我在使用Javascript排序一手牌时遇到了麻烦,部分原因在于我一直试图弄清楚何时使用数组以及何时使用对象,部分原因是因为Javascript不太容易使用比如,说到PHP的数组。我也不能使用jQuery,因为这是服务器端Node.js代码,我想坚持使用纯Javascript。

这是手的格式化开头:

[ 'QD', '8H', 'QS', '10C', '10D', '7D', 'KH', '9S' ]

如你所见,每张卡都被标记为等级+套装,因此QD是钻石女王,8H是8等等。按字母顺序对它们进行排序是不可接受的。我需要对它们进行排序的方式是通过以下数组中给出的值,从最高到最低:

[ QD: 25,
  '8H': 32,
  QS: 45,
  '10C': 17,
  '10D': 27,
  '7D': 21,
  KH: 36,
  '9S': 43 ]

作为旁注,有人可以告诉我为什么有些卡片名称周围有'个,有些则不然?以上是console.log的输出,所有'卡名'都以相同的方式初始化。

所以数组应该如下:

[ 'QS', '9S', 'KH', '8H', '10D', 'QD', '7D', '10C' ]

我知道需要在逻辑上做什么,但我不知道如何在Javascript中完成它。在PHP中,我会对卡片值的数组进行排序,然后使用foreach循环来完成它,其中key将是卡片;然后使用此数组的键创建一个手形数组。但是在Javascript中,我不知道如何获得数组的密钥。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

var ranks = { 
  'QD': 25,
  '8H': 32,
  'QS': 45,
  '10C': 17,
  '10D': 27,
  '7D': 21,
  'KH': 36,
  '9S': 43 };

var toSort = [ 'QD', '8H', 'QS', '10C', '10D', '7D', 'KH', '9S' ];

toSort.sort(function(left, right) {
   return ranks[right] - ranks[left]; // descending order
});

或者,您可以使用排名映射,并通过以下方式获取suit数组:

Object.keys(ranks).sort(...same_as_above...)