UNPKG

each-arg

Version:

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

60 lines (46 loc) 1.4 kB
'use strict'; var toArray = require('args-to-arr'); var isArrayLike = require('is-array-like'); var isFunction = require('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; } } } module.exports = eachArg; //# sourceMappingURL=each-arg.cjs.js.map