actionscript 3.0 在多个条件下对数据网格进行排序

actionscript 3.0 sort datagrid on multiple conditions

我有一个数据网格,其中包含一些比赛后的排名。我希望对 dataGrid 进行排序,og 先赢然后进球差。 XML.

中的每个团队 (1-12) 都有不同的变量,从多个游戏表中收集数据

如何在 "WIN" 上先排序,然后再在 "GD" 上排序?

感谢大家的帮助!

function Standings(){
var myDP5: DataProvider = new DataProvider();
        for (var k: int = 1; k < 13 ; k++) { 
            var TEAM_0 =this['TEAM_'+ k];
            var TEAM_0_GF: Array = this['TEAM_' + k+"_GF"];
            var TEAM_0_GP: int = this['TEAM_' + k+"_GP"];
            var TEAM_0_GA: int = this['TEAM_' + k+"_GA"];
            var TEAM_0_win: int = this['TEAM_' + k+"_win"];
            var TEAM_0_loss: int = this['TEAM_' + k+"_loss"];
            var TEAM_0_GD:int =TEAM_0_GF.length -TEAM_0_GA;
            myDP5.addItem({
                "TEAM": TEAM_0,
                "GP": TEAM_0_GP,
                "WIN": TEAM_0_win,
                "LOSS": TEAM_0_loss,
                "GF": TEAM_0_GF.length,
                "GA": TEAM_0_GA,
                "GD": TEAM_0_GD


            });

        }

        standings_grid = new DataGrid();
        standings_grid.addEventListener(Event.CHANGE, velgeKamp);
        standings_grid.columns = ["TEAM", "GP", "WIN","LOSS","GF","GA","GD"];
        standings_grid.dataProvider = myDP5;
        standings_grid.rowCount = 20;
        standings_grid.move(50, 50);
        standings_grid.width = 500;
        standings_grid.columns[0].width = 120;
        standings_grid.columns[1].width = 70;
        standings_grid.columns[2].width = 50;
        standings_grid.columns[3].width = 50;
        standings_grid.columns[4].width = 50;
        standings_grid.columns[5].width = 50;
        standings_grid.columns[6].width = 50;

        standings_grid.width = 440;
        standings_grid.resizableColumns = false;
        standings_grid.sortOn("WIN",Array.DESCENDING);
        //standings_grid.sortItemsOn("LOSS", Array.NUMERIC);
        //oversikt_gridd.height = 500;
        standings_grid.sortableColumns = true;
        addChild(standings_grid);
}

很简单。您应该创建项目的 Array,然后使用 compareFunction 参数 .sort(...) :

var aList:Array = new Array;

for (var k: int = 1; k < 13 ; k++)
{ 
    var TEAM_0 = this['TEAM_'+ k];
    var TEAM_0_GF: Array = this['TEAM_' + k + "_GF"];
    var TEAM_0_GP:   int = this['TEAM_' + k + "_GP"];
    var TEAM_0_GA:   int = this['TEAM_' + k + "_GA"];
    var TEAM_0_win:  int = this['TEAM_' + k + "_win"];
    var TEAM_0_loss: int = this['TEAM_' + k + "_loss"];
    var TEAM_0_GD:int = TEAM_0_GF.length - TEAM_0_GA;

    var anEntry:Object =
    {
        "TEAM": TEAM_0,
        "GP": TEAM_0_GP,
        "WIN": TEAM_0_win,
        "LOSS": TEAM_0_loss,
        "GF": TEAM_0_GF.length,
        "GA": TEAM_0_GA,
        "GD": TEAM_0_GD
    };

    aList.push(anEntry);
}

aList.sort(compareEntries);

// -1 to sort A before B
// 0 to not sort A and B
// 1 to sort A after B
function compareEntries(A:Object, B:Object):Number
{
    // I don't know what exactly you need
    // but I believe you'll figure it out.

    if (A['WIN'] > B['WIN']) return -1;
    if (A['WIN'] < B['WIN']) return 1;

    // Now if A['WIN'] == B['WIN'].

    if (A['GD'] > B['GD']) return -1;
    if (A['GD'] < B['GD']) return 1;

    return 0;
}

// Now pass the sorted items to the DataProvider.
var myDP5:DataProvider = new DataProvider;
while (aList.length) myDP5.addItem(aList.shift());