Javascript:排序对象

tom*_*tom 4 javascript sorting

function Player() {
  var score;

  this.getScore = function() { return score; }
  this.setScore = function(sc) { score = sc; }
}

function compare(playerA, playerB) {
  return playerA.getScore() - playerB.getScore();
}

var players = [];

players['player1'] = new Player();
players['player2'] = new Player();

Array(players).sort(compare);
Run Code Online (Sandbox Code Playgroud)

我有与上面类似的代码.当我使用调试器逐步执行代码时,compare函数永远不会被调用,并且数组未被排序.我不确定我的代码有什么问题?

ici*_*cio 12

它没有排序,因为您已指定了数组中的变量所属的键.排序只会在整数值键上移动对象.如果您创建数组,您应该看到您的排序工作如下:

var players = [new Player(), new Player()];
Run Code Online (Sandbox Code Playgroud)

但是,当然,它不会非常有效,因为你既没有要分类的分数,也没有识别它们的方法.这样做:

function Player(name, score) {
  this.getName = function() { return name; }
  this.getScore = function() { return score; }
  this.setScore = function(sc) { score = sc; }
}

function comparePlayers(playerA, playerB) {
  return playerA.getScore() - playerB.getScore();
}

var playerA = new Player('Paul', 10);
var playerB = new Player('Lucas', 5);
var playerC = new Player('William', 7);

var players = [playerA, playerB, playerC];

for (var i = 0; i < players.length; i++)
    alert(players[i].getName() + ' - ' + players[i].getScore());

players.sort(comparePlayers);

for (var i = 0; i < players.length; i++)
    alert(players[i].getName() + ' - ' + players[i].getScore());
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 它没有意义.通过使它们相关联,您已经自己对它们进行了排序.你想要达到的额外目的是让你认为你需要一个关联数组? (3认同)