aboutsummaryrefslogtreecommitdiff
path: root/node_modules/reduce/index.js
blob: b090f1c15fb55d8676075869543ada61350823e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
module.exports = reduce

var objectKeys = require('object-keys');

function reduce(list, iterator) {
    var keys = objectKeys(list)
        , i = 0
        , accumulator = list[0]
        , context = this

    if (arguments.length === 2) {
        i = 1
    } else if (arguments.length === 3) {
        accumulator = arguments[2]
    } else if (arguments.length >= 4) {
        context = arguments[2]
        accumulator = arguments[3]
    }

    for (var len = keys.length; i < len; i++) {
        var key = keys[i]
            , value = list[key]

        accumulator = iterator.call(context, accumulator, value, key, list)
    }

    return accumulator
}