javascript - 在 JavaScript 中对对象数组进行精细排序

标签 javascript arrays sorting

<分区>

我有一个表示曲棍球排名数据的对象数组:

[
  {
     name: "Russia",
     points: 10,
     iihf: 1
  },
  {
     name: "USA",
     points: 10,
     iihf: 7
  },
  {
     name: "Slovakia",
     points: 8,
     iihf: 6
  }
]

我想将数据从最高分降序排列。如果两个或多个团队共享相同的积分,则必须使用下一个维度对它们进行精细排序,即 IIHF 排名(升序)。对此有优雅的解决方案吗?

谢谢。

最佳答案

此外:如果您知道 iihf 分数的上限,您还可以预先计算一个仅用于排序的复合分数。复合分数可能如下所示:

obj.cscore = obj.points * 10000 + obj.iihf;

之后,你可以在 cscore 之后排序:

arr.sort(function(a,b) { 
    return a.cscore - b.cscore;
});

如果您不想污染您的原始对象,您可以使用临时 map (如 here 所述):

var map = arr.map(function (e, i) {
    return {index: i, cscore: e.points * 1000 + e.iihf};
});

map.sort(function (a,b) {
    return a.cscore - b.cscore;
});

var result = map.map(function(e){
  return arr[e.index]
});

FIDDLE

关于javascript - 在 JavaScript 中对对象数组进行精细排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839077/

相关文章:

javascript - 数组过滤元素彼此的值太接近

javascript - 从文件目录结构创建 JSON 数据的高效函数?

具有二维数组的 Java 可变参数

mongodb排序时先返回大写字符串

java - 我的 HeapSort 代码有什么问题?

javascript - 格式化输出日期

javascript - Google Vision API 文本检测奇怪的行为 - Javascript

javascript - 在 JavaScript 中按两个值对数组进行排序

javascript - 在 Python 中更改来自 Selenium 的元素列表

javascript - 用javascript显示奇数