javascript - Javascript 中按其他数组的值对数组进行排序?

标签 javascript arrays sorting

我在用 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/

相关文章:

java - 根据可以为空的字段对对象列表进行排序

javascript - 在 Angular 中,你总是需要继承 Controller 中的服务变量吗?

javascript - 对 d3.v4 中的嵌套数据进行排序

php - 将组合字符串拆分为数组

c - 基数排序循环错误

sorting - xsl 排序未按预期工作

javascript - 在 JavaScript 中使用正则表达式提取 URL 的特定部分

javascript - Three.js - 导入带有纹理的 3d 对象

Javascript 窗口对象,从 namespace 数组构建函数调用

objective-c - 将结构写入 NSMutableArray