UNPKG

each-arg

Version:

Iterates through arguments or any other array-like object starting from specific index.

58 lines (45 loc) 1.38 kB
import toArray from 'args-to-arr'; import isArrayLike from 'is-array-like'; import isFunction from 'is-function'; function error(message) { return new TypeError(message); } function wrapCallback(callback, thisArg, arr, args, argsLen) { var extraLen = argsLen - 3; return extraLen === 0 ? function (i) { return callback.call(thisArg, arr[i], i); } : extraLen === 1 ? function (i) { return callback.call(thisArg, arr[i], i, args[3]); } : function (i) { return callback.call.apply(callback, [thisArg, arr[i], i].concat(toArray(args, 3))); }; } function eachArg(arr, start, callback) { var args = arguments; var argsLen = args.length; if (argsLen < 3) { throw error("expected 3 arguments, got " + argsLen); } if (!isArrayLike(arr) && arr !== "") { throw error(arr + " can't be converted to array."); } if (typeof start !== "number" || !isFinite(start)) { throw error(start + " is not a valid start point."); } if (!isFunction(callback)) { throw error(callback + " is not a function."); } var arrObj = Object(arr); var len = arrObj.length; if (start < 0) { start += len; } var cb = wrapCallback(callback, this, arrObj, args, argsLen); for (var i = start; i < len; i++) { if (i in arrObj && cb(i)) { return; } } } export default eachArg; //# sourceMappingURL=each-arg.es.js.map