我在用 Javascript 对一手牌进行排序时遇到了麻烦,部分原因是我一直试图弄清楚何时使用数组、何时使用对象,部分原因是 Javascript 不太容易使用就像 PHP 中的数组一样。我也无法使用 jQuery,因为这是服务器端 Node.js 代码,我想坚持使用纯 Javascript。
这就是手牌的格式化方式:
[ 'QD', '8H', 'QS', '10C', '10D', '7D', 'KH', '9S' ]
正如你所看到的,每张牌都被标记为等级+花色,所以QD是方 block 皇后,8H是红心8等等。按字母顺序排序是 Not Acceptable 。我需要对它们进行排序的方式是按照以下数组中给出的值,从最高到最低:
[ 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 中,我什至不知道如何获取数组的键。
最佳答案
你可以这样做:
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
});
或者,您可以只使用排名图,并通过以下方式获取花色数组:
Object.keys(ranks).sort(...same_as_above...)
关于javascript - Javascript 中按其他数组的值对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21315461/