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 - [].sort 忽略未定义的值?

javascript - NextJS : getInitialProps method

javascript - PHP:获取关联数组中的最后一个元素

java - 当用户单击“否”时,如何退出 JOptionPane 的 while 循环?

c - 如何将结构的内容保存到 C 文件中?

c# - 在 C# 中对字符串数组进行插入排序

javascript - Vue 搜索按钮无法获取结果

javascript - 在 React 中延迟加载嵌入的 YouTube 视频

javascript - 使用 node.js 进行垃圾收集

python - 为什么下面一段对一堆对象属性进行多重排序的代码中的规范会颠倒过来?