Implement missing Collection#reduce functionality

This commit is contained in:
Schuyler Cebulskie
2016-12-24 01:59:01 -05:00
parent 265ac90234
commit 28ca83011c

View File

@@ -293,14 +293,28 @@ class Collection extends Map {
/**
* Identical to
* [Array.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce).
* @param {Function} fn Function used to reduce
* @param {*} [startVal] The starting value
* @param {Function} fn Function used to reduce, taking four arguments; `accumulator`, `currentValue`, `currentKey`,
* and `collection`
* @param {*} [initialValue] Starting value for the accumulator
* @returns {*}
*/
reduce(fn, startVal) {
let currentVal = startVal;
for (const [key, val] of this) currentVal = fn(currentVal, val, key, this);
return currentVal;
reduce(fn, initialValue) {
let accumulator;
if (typeof initialValue !== 'undefined') {
accumulator = initialValue;
for (const [key, val] of this) accumulator = fn(accumulator, val, key, this);
} else {
let first = true;
for (const [key, val] of this) {
if (first) {
accumulator = val;
first = false;
continue;
}
accumulator = fn(accumulator, val, key, this);
}
}
return accumulator;
}
/**