each-arg
Version:
Iterates through arguments or any other array-like object starting from specific index.
58 lines (45 loc) • 1.38 kB
JavaScript
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