# Fast way to compact array?

**URL:** <https://forum.kirupa.com/t/fast-way-to-compact-array/268685>\
**Category:** flash\
**Created:** [August 17, 2008, 6:44am UTC](https://forum.kirupa.com/t/fast-way-to-compact-array/268685 "2008-08-17T06:44:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![DesignerMichael](https://avatars.discourse-cdn.com/v4/letter/d/898d66/32.png) [@DesignerMichael](https://forum.kirupa.com/u/DesignerMichael)\
**Post date:** [August 17, 2008, 6:44am UTC](https://forum.kirupa.com/t/fast-way-to-compact-array/268685/1 "2008-08-17T06:44:03Z")

</div>

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…

```auto

  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
