PDA

Volledige versie bekijken : sortOn object in object


Mitcho_0
%Europe/Berlin %575 %2008, 14:49
Hallo!

Ik heb een Array, met daarin Objects.... die Objects hebben attributen/variabelen.
Mooi voorbeeld uit de Help
var rec_array:Array = new Array();
rec_array.push({name: "john", city: "omaha", zip: 68144});
rec_array.push({name: "bob", city: "omaha", zip: 94010});
Dit is niet moeilijk om te sorteren, bijvoorbeeld zo:
rec_array.sortOn('zip');

Nu het probleem...
Stel dat de attributen city en zip in een aparte address-Object staan.
Zoals hier:
var rec_array:Array = new Array();
rec_array.push({name: "john", address:{city: "omaha", zip: 68144}});
rec_array.push({name: "bob", address:{city: "omaha", zip: 94010}});

Hoe kan ik dan rec_array sorteren op zip?
Ik kan niet zeggen: rec_array.sortOn('address.zip');

Wie kan me helpen?

Jan
%Europe/Berlin %594 %2008, 15:16
(Zie EDIT onderaan)
Volgens mij kan het enkel met een tijdelijke array als tussenstap:
temp_array.push({original:rec_array[i], zip:rec_array[i].address.zip});
//vervolgens de temp_array sorteren op zip
//dan de 'originals' uit de gesorteerde temp_array terug in de rec_array pushen

var rec_array:Array = new Array();
rec_array.push({name: "bob", address:{city: "omaha", zip: 3}});
rec_array.push({name: "john", address:{city: "omaha", zip: 1}});
rec_array.push({name: "Jan", address:{city: "omaha", zip: 2}});
trace("Before:");
for (var i:Number=0; i<rec_array.length;i++)
{
trace("name: "+rec_array[i].name+", address.city: "+rec_array[i].address.city+", address.zip: "+rec_array[i].address.zip);
}
//-----------------------------
var temp_array=new Array();
for (var i:Number=0; i<rec_array.length;i++)
{
temp_array.push({original:rec_array[i], zip:rec_array[i].address.zip});
}
temp_array.sortOn("zip");
//-----------------------------
rec_array=new Array();
for (var i:Number=0; i<temp_array.length; i++)
{
rec_array.push(temp_array[i].original);
}
//----------------------------
trace("-----------------------------");
trace("After:");
for (var i:Number=0; i<rec_array.length;i++)
{
trace("name: "+rec_array[i].name+", address.city: "+rec_array[i].address.city+", address.zip: "+rec_array[i].address.zip);
}
Before:
name: bob, address.city: omaha, address.zip: 3
name: john, address.city: omaha, address.zip: 1
name: Jan, address.city: omaha, address.zip: 2
-----------------------------
After:
name: john, address.city: omaha, address.zip: 1
name: Jan, address.city: omaha, address.zip: 2
name: bob, address.city: omaha, address.zip: 3

EDIT: Dit is korter en sneller:
var rec_array:Array = new Array();
rec_array.push({name: "bob", address:{city: "omaha", zip: 3}});
rec_array.push({name: "john", address:{city: "omaha", zip: 1}});
rec_array.push({name: "Jan", address:{city: "omaha", zip: 2}});
for(var i:Number=0; i<rec_array.length; i++)
{
rec_array[i].zip=rec_array[i].address.zip;
}
rec_array.sortOn("zip");
for(var i:Number=0; i<rec_array.length; i++)
{
delete rec_array[i].zip
}

Groeten,
http://users.telenet.be/jansurf/cwo.png Jan