# angular.Array.sum

## Description

This function calculates the sum of all numbers in `array`. If the `expressions` is supplied, it is evaluated once for each element in `array` and then the sum of these values is returned.

Note: this function is used to augment the `Array` type in angular expressions. See `angular.Array` for more info.

## Usage

    angular.Array.sum(array[, expression]);

### Parameters

- `array – {Array} –`

  The source array.

- `expression(optional) – {(string|function())} –`

  Angular expression or a function to be evaluated for each element in `array`. The array element becomes the `this` during the evaluation.

### Returns

`{number}` –

Sum of items in the array.

## Example

     <table ng:init="invoice= {items:[{qty:10, description:'gadget', cost:9.95}]}">
       <tr><th>Qty</th><th>Description</th><th>Cost</th><th>Total</th><th></th></tr>
       <tr ng:repeat="item in invoice.items">
         <td><input name="item.qty" value="1" size="4" ng:required ng:validate="integer"></td>
        <td><input name="item.description"></td>
          <td><input name="item.cost" value="0.00" ng:required ng:validate="number" size="6"></td>
         <td>{{item.qty * item.cost | currency}}</td>
         <td>[<a href ng:click="invoice.items.$remove(item)">X</a>]</td>
       </tr>
       <tr>
         <td><a href ng:click="invoice.items.$add()">add item</a></td>
         <td></td>
         <td>Total:</td>
         <td>{{invoice.items.$sum('qty*cost') | currency}}</td>
       </tr>
     </table>

     //TODO: these specs are lame because I had to work around issues #164 and #167
     it('should initialize and calculate the totals', function() {
       expect(repeater('.doc-example-live table tr', 'item in invoice.items').count()).toBe(3);
       expect(repeater('.doc-example-live table tr', 'item in invoice.items').row(1)).
         toEqual(['$99.50']);
       expect(binding("invoice.items.$sum('qty*cost')")).toBe('$99.50');
       expect(binding("invoice.items.$sum('qty*cost')")).toBe('$99.50');
     });

     it('should add an entry and recalculate', function() {
       element('.doc-example-live a:contains("add item")').click();
       using('.doc-example-live tr:nth-child(3)').input('item.qty').enter('20');
       using('.doc-example-live tr:nth-child(3)').input('item.cost').enter('100');

       expect(repeater('.doc-example-live table tr', 'item in invoice.items').row(2)).
         toEqual(['$2,000.00']);
       expect(binding("invoice.items.$sum('qty*cost')")).toBe('$2,099.50');
     });