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());
我有一个数据网格,其中包含一些比赛后的排名。我希望对 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());