我在使用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中,我不知道如何获得数组的密钥。
答案 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...)