Similar Question:
How to sort an array of javascript objects?
I'm in the process of transitioning some of my older ActionScript 2.0 code to JavaScript. While most things are running smoothly, I've hit a roadblock when trying to numerically sort my array based on score.
In my original ActionScript code, I used:
// Sort the capitals array so that the capitals with the lowest score will be at the top
capitalsList.sortOn("score", Array.NUMERIC);
This method worked fine in ActionScript but doesn't seem to have the same effect in JavaScript. I tried changing it to:
capitalsList.sort("score", Array.NUMERIC);
However, even after this change, "Alabama" is still displayed first (when "Connecticut" should actually appear first since its score is -1). What am I overlooking here?
You can view my script on JS Bin: http://jsbin.com/ibitez/1/edit
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script>
window.onload = function() {
function capitalsConstructor(capitalName, stateName, score) {
this.capitalName = capitalName;
this.stateName = stateName;
this.score = score;
}
// Create state capitals array
var capitalsList = new Array();
// All 50 capitals are loaded into the array with a score of 0
// Sample limited to 10 capitals
capitalsList[0] = new capitalsConstructor("Montgomery", "Alabama", 0);
capitalsList[1] = new capitalsConstructor("Juneau", "Alaska", 0);
capitalsList[2] = new capitalsConstructor("Phoenix", "Arizona", 0);
capitalsList[3] = new capitalsConstructor("Little Rock", "Arkansas", 0);
capitalsList[4] = new capitalsConstructor("Sacramento", "California", 0);
capitalsList[5] = new capitalsConstructor("Denver", "Colorado", 0);
capitalsList[6] = new capitalsConstructor("Hartford", "Connecticut", -1);
capitalsList[7] = new capitalsConstructor("Dover", "Delaware", 0);
capitalsList[8] = new capitalsConstructor("Tallahassee", "Florida", 0);
capitalsList[9] = new capitalsConstructor("Atlanta", "Georgia", 0);
capitalsList.sort("score", Array.NUMERIC);
solution = capitalsList[0].stateName;
document.getElementById("divSolution").innerText = solution;
}
</script>
</head>
<body>
<div id="divSolution"></div>
</body>
</html>