| var hasOwn = Object.prototype.hasOwnProperty; | |
| module.exports = function (xs, f, acc) { | |
| var hasAcc = arguments.length >= 3; | |
| if (hasAcc && xs.reduce) return xs.reduce(f, acc); | |
| if (xs.reduce) return xs.reduce(f); | |
| for (var i = 0; i < xs.length; i++) { | |
| if (!hasOwn.call(xs, i)) continue; | |
| if (!hasAcc) { | |
| acc = xs[i]; | |
| hasAcc = true; | |
| continue; | |
| } | |
| acc = f(acc, xs[i], i); | |
| } | |
| return acc; | |
| }; |