1

重複の可能性:
javascript オブジェクトの配列をソートする方法は?

古い ActionScript 2.0 コードの一部を JavaScript に変換しようとしています。すべて正常に動作しますが、配列をスコアで数値的に並べ替えることができません。

元の ActionScript コードでは、次を使用しました。

// Sort the capitals array so that the capitals with the lowest score will be at the top
capitalsList.sortOn("score", Array.NUMERIC);

これは正常に機能しましたが、JavaScript では機能しません。私はそれを次のように変更しました:

capitalsList.sort("score", Array.NUMERIC);

ただし、Alabama は引き続き出力されます (Connecticut はスコアが -1 であるため、出力されるはずです)。私は何が欠けていますか?

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>
4

1 に答える 1

4

メソッドにコールバックを提供する必要がありますsort

capitalsList = capitalsList.sort(function (a, b) {
    return a.score - b.score;
});

これがフィドルです:http://jsfiddle.net/g2CQG/

于 2013-01-14T01:36:11.090 に答える