Is there a faster way to compact this array than creating an array, and looping over and over again?
The method I just created that works…
var damagesArray = new Array();
damagesArray[0] = {Who:12, Amount:17};
damagesArray[1] = {Who:15, Amount:12};
damagesArray[2] = {Who:12, Amount:13};
damagesArray[3] = {Who:12, Amount:18};
damagesArray[4] = {Who:9, Amount:12};
var newArray = compactDamages(damagesArray);
for (var i:String in newArray) {
trace(String(newArray*.Who) + '< Who - Amount: ' + String(newArray*.Amount));
}
function compactDamages(dmgArray:Array):Array {
var result:Array = new Array;
for (var i:String in dmgArray) {
var Index = searchResult(result, dmgArray*.Who);
if (Index >= 0) {
result[Index].Amount += dmgArray*.Amount;
} else {
result.push(dmgArray*);
}
}
return result;
}
function searchResult(Result, Who):int {
for (var i:String in Result) {
if (Result*.Who == Who) {
return int(i);
}
}
return -1;
}
Output:
12< Who - Amount: 48
15< Who - Amount: 12
9< Who - Amount: 12