Fast way to compact array?

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