Javascript: Sort Objects
Solution 1:
It's not sorting because you have specified the keys that the variables within the array belong on. Sorting will only move the objects on integer-valued keys. You should see your sorting work if you create your array as follow:
var players = [new Player(), new Player()];
though, of course, it won't be very effective since you have neither a score on which to sort or a method of identifying them. This'll do it:
functionPlayer(name, score) {
this.getName = function() { return name; }
this.getScore = function() { return score; }
this.setScore = function(sc) { score = sc; }
}
functioncomparePlayers(playerA, playerB) {
return playerA.getScore() - playerB.getScore();
}
var playerA = newPlayer('Paul', 10);
var playerB = newPlayer('Lucas', 5);
var playerC = newPlayer('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());
Hope that helps.
Solution 2:
The main problem lies in this line:
Array(players).sort(compare);
Array(something)
makes an array with something
as its element.
console.log(Array(players)); //[[player1, player2]]
Use numeric indexed array instead of using object like array as in players['player1']
Run the following code (replace console.log with alert if you don't have Firebug).
functionPlayer() {
var score;
//return this.score - else it returns undefinedthis.getScore = function() { returnthis.score; }
this.setScore = function(sc) { this.score = sc; }
}
functioncompare(playerA, playerB) {
console.log("called " + playerA.getScore() + " " + playerB.score);
//compare method should return 0 if equal, 1 if a > b and -1 if a < breturn (playerA.getScore() == playerB.getScore()) ? 0
: ((playerA.getScore() > playerB.getScore()) ? 1 : -1);
}
var players = [];
players[0] = newPlayer();
players[1] = newPlayer();
players[2] = newPlayer();
players[3] = newPlayer();
players[0].setScore(9);
players[1].score = 14;
players[2].score = 11;
players[3].score = 10;
players.sort(compare);
console.log(players);//prints sorted array
Solution 3:
It's probably because you don't have any "array values" inside your array - textual indexes are not regarded as array values but as object propertiest (arrays are "objects in disguise" in javascript). You can add as many properties to any object but array specific methods like sort
take only "real" array members as their parameteres (i.e. only with numerical indexes)
var arr = newArray()
arr[0] = 1
arr[1] = 2
arr["textual_index"] = 3alert(arr.length);
The last line alerts "2" not "3" since there are only two values with numeric indexes.
Solution 4:
you can also use like below:
var a = [];
a.push(obj1);
a.push(obj2);
a.sort(compare);
so you can use push method rather than an integer index
Post a Comment for "Javascript: Sort Objects"