1 | var hasOwn = Object.prototype.hasOwnProperty;
|
2 |
|
3 | module.exports = function (xs, f, acc) {
|
4 | var hasAcc = arguments.length >= 3;
|
5 | if (hasAcc && xs.reduce) return xs.reduce(f, acc);
|
6 | if (xs.reduce) return xs.reduce(f);
|
7 |
|
8 | for (var i = 0; i < xs.length; i++) {
|
9 | if (!hasOwn.call(xs, i)) continue;
|
10 | if (!hasAcc) {
|
11 | acc = xs[i];
|
12 | hasAcc = true;
|
13 | continue;
|
14 | }
|
15 | acc = f(acc, xs[i], i);
|
16 | }
|
17 | return acc;
|
18 | };
|