1 | var keys = require('./keys')
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function reduce (array, callback, initialValue) {
|
12 | if (array) {
|
13 | var len, reduceMethod
|
14 | var index = 0
|
15 | var context = null
|
16 | var previous = initialValue
|
17 | var isInitialVal = arguments.length > 2
|
18 | var keyList = keys(array)
|
19 | if (array.length && array.reduce) {
|
20 | reduceMethod = function () {
|
21 | return callback.apply(context, arguments)
|
22 | }
|
23 | if (isInitialVal) {
|
24 | return array.reduce(reduceMethod, previous)
|
25 | }
|
26 | return array.reduce(reduceMethod)
|
27 | }
|
28 | if (isInitialVal) {
|
29 | index = 1
|
30 | previous = array[keyList[0]]
|
31 | }
|
32 | for (len = keyList.length; index < len; index++) {
|
33 | previous = callback.call(context, previous, array[keyList[index]], index, array)
|
34 | }
|
35 | return previous
|
36 | }
|
37 | }
|
38 |
|
39 | module.exports = reduce
|