【问题标题】:JavaScripting .sort()'ing a Multidimensional Array of Scores to Order the Player NamesJavaScripting .sort()'ing 一个多维分数数组来排序玩家姓名
【发布时间】:2012-04-21 13:23:50
【问题描述】:

我对 JS .sort() 函数的理解已经足够好了,而且我对多维数组有一个松散的掌握,但我有点卡住了。这是我得到的:

var player1 = ["bob", 20];
var player2 = ["jon", 40];
var player3 = ["tim", 10];
var scores = [player1[1], player2[1], player3[1]];

scores.sort(sortfunc);

function sortfunc(a,b){
  return a - b;
}

alert(scores);

显然这对分数进行了正确排序,但我想要的是根据他们的分数在 alert() 中适当地对玩家姓名进行排序,例如蒂姆,鲍勃,乔恩。我不一定要找人直接发布答案,但在正确方向上的一点提示不会有坏处!

另外,有没有更好的(即更干净、更简单,你有什么)用 jQuery 做这件事的方法?我知道这并不重要,但我只是想知道它在 jQuery 中会是什么样子。

感谢您的阅读。

【问题讨论】:

  • 让我澄清一下:您想按照名字对球员进行排序吗?
  • 我想对玩家进行排序也可以,是的。我只是希望能够正确地按照谁在第一、第二、第三等名称排序,不管它是如何完成的。
  • 我已经添加了一个答案,请看看是否符合您的要求:)
  • 你可能想看看 underscore.js,而不是使用 jQuery 来做这件事,它有一堆简洁的函数来处理 javascript 的内置数据结构以及一些函数帮助器。 heres the sortBy documentation

标签: javascript jquery sorting multidimensional-array


【解决方案1】:

scores 中传入整个数组,然后您的 sortFunc 提取第一个元素:

http://jsfiddle.net/PS2wS/

var player1 = ["bob", 20];
var player2 = ["jon", 40];
var player3 = ["tim", 10];
var scores = [player1, player2, player3];

scores.sort(sortfunc);

function sortfunc(a,b){
  return a[1] - b[1];
}

【讨论】:

  • 这绝对是我想要的。我通过传递整个数组然后仅按分数排序来了解您做了什么。不幸的是,我完全不明白为什么传递整个数组会以这种方式工作,所以我想我对多维数组的掌握充其量是微不足道的。无论如何,谢谢你解决它。
  • 如果允许,我会在 3 分钟内给你答案。 =)
  • @daveycroqet sort() 的第一个参数中的回调有两个参数,即直接调用数组sort() 的第一级成员。所以在我的回答中,a 和 b 将是 player1、player2 和 player3。我们告诉它如何通过减去 playerX 的第一个元素(即得分)来返回订单。
猜你喜欢
  • 2017-06-13
  • 2013-02-26
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多