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; | |
}; |