29 lines
671 B
JavaScript
29 lines
671 B
JavaScript
'use strict';
|
|
|
|
var objectKeys = require('object-keys');
|
|
|
|
module.exports = function reduce(list, iterator) {
|
|
var keys = objectKeys(list);
|
|
var i = 0;
|
|
var accumulator = list[0];
|
|
var 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];
|
|
var value = list[key];
|
|
|
|
accumulator = iterator.call(context, accumulator, value, key, list);
|
|
}
|
|
|
|
return accumulator;
|
|
};
|