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)
希望有所帮助.