From 17e32017a737fac59207f156b6d48aa01ac7eafb Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Mon, 22 Jul 2013 19:11:44 -0700 Subject: [PATCH] Allow `argCount` to be omitted an not default to 3, and cleanup `createBound`. Former-commit-id: cbafeaa441aae1ef28268bc2614b1a6e038acfe1 --- build.js | 11 ++-- dist/lodash.compat.js | 83 +++++++++++++++---------------- dist/lodash.compat.min.js | 76 ++++++++++++++-------------- dist/lodash.js | 94 +++++++++++++++++------------------ dist/lodash.min.js | 68 ++++++++++++------------- dist/lodash.underscore.js | 75 ++++++++++++++-------------- dist/lodash.underscore.min.js | 52 +++++++++---------- lodash.js | 90 ++++++++++++++++----------------- 8 files changed, 272 insertions(+), 277 deletions(-) diff --git a/build.js b/build.js index 6caf82e9f..0013f298a 100644 --- a/build.js +++ b/build.js @@ -1639,10 +1639,9 @@ // remove `__bindData__` logic and `setBindData` function calls from `createBound` source = source.replace(matchFunction(source, 'createBound'), function(match) { return match - .replace(/\bargs *=.+?__bindData__.+\s+/, '') - .replace(/(?:\s*\/\/.*)*\n( *)if *\(args\)[\s\S]+?\n\1}/m, '') + .replace(/(?:\s*\/\/.*)*\n( *)var args *=[\s\S]+?\n\1}/, '') .replace(/(?:\s*\/\/.*)*\n.+args *= *nativeSlice.+/, '') - .replace(/(?:\s*\/\/.*)*\n.+?setBindData.+/m, '') + .replace(/(?:\s*\/\/.*)*\n.+?setBindData.+/, '') }); @@ -3060,7 +3059,7 @@ ' var index = -1,', ' length = collection ? collection.length : 0;', '', - " callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);", + " callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3);", " if (typeof length == 'number') {", ' while (++index < length) {', ' if (callback(collection[index], index, collection) === false) {', @@ -3089,7 +3088,7 @@ ' var index = -1,', ' length = collection ? collection.length : 0;', '', - ' callback = lodash.createCallback(callback, thisArg);', + ' callback = lodash.createCallback(callback, thisArg, 3);', " if (typeof length == 'number') {", ' var result = Array(length);', ' while (++index < length) {', @@ -3518,7 +3517,7 @@ ' length = collection ? collection.length : 0,', " result = Array(typeof length == 'number' ? length : 0);", '', - ' callback = lodash.createCallback(callback, thisArg);', + ' callback = lodash.createCallback(callback, thisArg, 3);', ' forEach(collection, function(value, key, collection) {', ' result[++index] = {', " 'criteria': callback(value, key, collection),", diff --git a/dist/lodash.compat.js b/dist/lodash.compat.js index 7d2c88be3..78985773d 100644 --- a/dist/lodash.compat.js +++ b/dist/lodash.compat.js @@ -482,7 +482,6 @@ /** Native method shortcuts */ var ceil = Math.ceil, clearTimeout = context.clearTimeout, - concat = arrayRef.concat, defineProperty = reNative.test(defineProperty = Object.defineProperty) && defineProperty, floor = Math.floor, getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, @@ -491,7 +490,8 @@ propertyIsEnumerable = objectProto.propertyIsEnumerable, setImmediate = context.setImmediate, setTimeout = context.setTimeout, - toString = objectProto.toString; + toString = objectProto.toString, + unshift = arrayRef.unshift; /* Native method shortcuts for methods with the same name as other `lodash` methods */ var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind, @@ -933,7 +933,7 @@ /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ var eachIteratorOptions = { 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg)", + 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3)", 'array': "typeof length == 'number'", 'loop': 'if (callback(iterable[index], index, collection) === false) return result' }; @@ -1372,16 +1372,12 @@ if (!isFunc && !isBindKey) { throw new TypeError; } - var key = thisArg; - - // juggle arguments for `_.bindKey` behavior - if (isBindKey) { - thisArg = func; - } // use `Function#bind` if it exists and is fast // (in V8 `Function#bind` is slower except when partially applied) if (!isPartial && !isAlt && !partialRightArgs.length && (support.fastBind || (nativeBind && partialArgs.length))) { - var bound = nativeBind.call.apply(nativeBind, concat.call(arrayRef, func, thisArg, partialArgs)); + args = [func, thisArg]; + push.apply(args, partialArgs); + var bound = nativeBind.call.apply(nativeBind, args); } else { bound = function() { @@ -1394,7 +1390,7 @@ func = thisArg[key]; } if (partialArgs.length || partialRightArgs.length) { - args = concat.apply(partialArgs, args); + unshift.apply(args, partialArgs); push.apply(args, partialRightArgs); } if (this instanceof bound) { @@ -1409,6 +1405,10 @@ return func.apply(thisBinding, args); }; } + if (isBindKey) { + var key = thisArg; + thisArg = func; + } return bound; } @@ -1891,7 +1891,7 @@ */ function findKey(object, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forOwn(object, function(value, key, object) { if (callback(value, key, object)) { result = key; @@ -2513,7 +2513,7 @@ result = {}; if (isFunc) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } else { var props = baseFlatten(arguments, true, false, 1); } @@ -2595,7 +2595,7 @@ } } } else { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forIn(object, function(value, key, object) { if (callback(value, key, object)) { result[key] = value; @@ -2803,7 +2803,7 @@ */ function countBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -2855,7 +2855,7 @@ */ function every(collection, callback, thisArg) { var result = true; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -2916,7 +2916,7 @@ */ function filter(collection, callback, thisArg) { var result = []; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -2982,7 +2982,7 @@ * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' } */ function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -3080,7 +3080,7 @@ */ function groupBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -3168,7 +3168,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { while (++index < length) { result[index] = callback(collection[index], index, collection); @@ -3237,7 +3237,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); baseEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -3306,7 +3306,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); baseEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -3475,7 +3475,7 @@ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }] */ function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); return filter(collection, function(value, index, collection) { return !callback(value, index, collection); }); @@ -3577,7 +3577,7 @@ */ function some(collection, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -3636,7 +3636,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { var object = result[++index] = getObject(); object.criteria = callback(value, key, collection); @@ -3802,7 +3802,7 @@ var index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length) { if (callback(array[index], index, array)) { return index; @@ -3875,7 +3875,7 @@ if (typeof callback != 'number' && callback != null) { var index = -1; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -4043,7 +4043,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -4176,7 +4176,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -4336,7 +4336,7 @@ index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -4480,7 +4480,7 @@ isSorted = false; } if (callback != null) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } return baseUniq(array, isSorted, callback); } @@ -4740,7 +4740,7 @@ * @category Functions * @param {Mixed} [func=identity] The value to convert to a callback. * @param {Mixed} [thisArg] The `this` binding of the created callback. - * @param {Number} [argCount=3] The number of arguments the callback accepts. + * @param {Number} [argCount] The number of arguments the callback accepts. * @returns {Function} Returns a callback function. * @example * @@ -4813,23 +4813,22 @@ if (typeof thisArg == 'undefined') { return func; } - if (argCount === 1) { - return function(value) { + switch (argCount) { + case 1: return function(value) { return func.call(thisArg, value); }; - } - if (argCount === 2) { - return function(a, b) { + case 2: return function(a, b) { return func.call(thisArg, a, b); }; - } - if (argCount === 4) { - return function(accumulator, value, index, collection) { + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { return func.call(thisArg, accumulator, value, index, collection); }; } - return function(value, index, collection) { - return func.call(thisArg, value, index, collection); + return function() { + return func.apply(thisArg, arguments); }; } diff --git a/dist/lodash.compat.min.js b/dist/lodash.compat.min.js index 0485cf0a9..8048b73db 100644 --- a/dist/lodash.compat.min.js +++ b/dist/lodash.compat.min.js @@ -5,46 +5,48 @@ */ ;!function(n){function t(n,t,r){r=(r||0)-1;for(var e=n?n.length:0;++rt||typeof n=="undefined")return 1;if(nr?0:r);++e=O&&i===t,v=u||p?f():c;if(p){var h=o(v);h?(i=r,v=h):(p=b,v=u?v:(s(v),c))}for(;++ai(v,y))&&((u||p)&&v.push(y),c.push(h))}return p?(s(v.b),g(v)):u&&s(v),c}function ut(n,t,r,e,u,a){var o=a&&!u;if(!vt(n)&&!o)throw new Yt;var i=t;o&&(t=n);var f=u||a||e.length||!(Pr.fastBind||mr&&r.length)?function(){var a=arguments,l=u?this:t; -return o&&(n=t[i]),(r.length||e.length)&&(a=ir.apply(r,a),sr.apply(a,e)),this instanceof f?(l=ot(n.prototype),a=n.apply(l,a),ht(a)?a:l):n.apply(l,a)}:mr.call.apply(mr,ir.call(Zt,n,t,r));return f}function at(){var n=l();n.g=q,n.b=n.c=n.f=n.h="",n.e="r",n.i=m,n.j=m;for(var t,r=0;t=arguments[r];r++)for(var e in t)n[e]=t[e];r=n.a,n.d=/^[^,]+/.exec(r)[0],t=Kt,r="return function("+r+"){",e="var m,r="+n.d+",C="+n.e+";if(!r)return C;"+n.h+";",n.b?(e+="var s=r.length;m=-1;if("+n.b+"){",Pr.unindexedChars&&(e+="if(q(r)){r=r.split('')}"),e+="while(++mr?0:r);++e=O&&i===t,v=u||p?f():c;if(p){var h=o(v);h?(i=r,v=h):(p=b,v=u?v:(s(v),c))}for(;++ai(v,y))&&((u||p)&&v.push(y),c.push(h))}return p?(s(v.b),g(v)):u&&s(v),c}function ut(n,t,r,e,u,a){var o=a&&!u;if(!vt(n)&&!o)throw new Yt;if(u||a||e.length||!(Pr.fastBind||mr&&r.length))i=function(){var a=arguments,l=u?this:t; +return o&&(n=t[f]),(r.length||e.length)&&(yr.apply(a,r),pr.apply(a,e)),this instanceof i?(l=ot(n.prototype),a=n.apply(l,a),ht(a)?a:l):n.apply(l,a)};else{args=[n,t],pr.apply(args,r);var i=mr.call.apply(mr,args)}if(o){var f=t;t=n}return i}function at(){var n=l();n.g=q,n.b=n.c=n.f=n.h="",n.e="r",n.i=m,n.j=m;for(var t,r=0;t=arguments[r];r++)for(var e in t)n[e]=t[e];r=n.a,n.d=/^[^,]+/.exec(r)[0],t=Kt,r="return function("+r+"){",e="var m,r="+n.d+",C="+n.e+";if(!r)return C;"+n.h+";",n.b?(e+="var s=r.length;m=-1;if("+n.b+"){",Pr.unindexedChars&&(e+="if(q(r)){r=r.split('')}"),e+="while(++mk;k++)e+="m='"+n.g[k]+"';if((!(p&&v[m])&&l.call(r,m))",n.i||(e+="||(!v[m]&&r[m]!==y[m])"),e+="){"+n.f+"}"; -e+="}"}return(n.b||Pr.nonEnumArgs)&&(e+="}"),e+=n.c+";return C",t=t("i,j,l,indicatorObject,n,o,q,t,u,y,z,w,G,H,J",r+e+"}"),g(n),t(H,nr,pr,w,pt,$r,mt,n.j&&Rr,_,tr,X,Br,V,rr,yr)}function ot(n){return ht(n)?dr(n):{}}function it(n){return Tr[n]}function ft(){var n=(n=_.indexOf)===Bt?t:n;return n}function lt(n){var t,r;return!n||yr.call(n)!=M||(t=n.constructor,vt(t)&&!(t instanceof t))||!Pr.argsClass&&pt(n)||!Pr.nodeClass&&c(n)?b:Pr.ownLast?(Kr(n,function(n,t,e){return r=pr.call(e,t),b}),r!==false):(Kr(n,function(n,t){r=t -}),r===y||pr.call(n,r))}function ct(n){return Wr[n]}function pt(n){return n&&typeof n=="object"?yr.call(n)==T:b}function st(n){var t=[];return Kr(n,function(n,r){vt(n)&&t.push(r)}),t.sort()}function gt(n){for(var t=-1,r=Rr(n),e=r.length,u={};++tr?kr(0,a+r):r)||0,a&&typeof a=="number"?o=-1<(mt(n)?n.indexOf(t,r):u(n,t,r)):qr(n,function(n){return++ea&&(a=i)}}else t=!t&&mt(n)?u:_.createCallback(t,r),qr(n,function(n,r,u){r=t(n,r,u),r>e&&(e=r,a=n)});return a}function Ot(n,t,r,e){var u=3>arguments.length;if(t=_.createCallback(t,e,4),$r(n)){var a=-1,o=n.length;for(u&&(r=n[++a]);++aarguments.length;if(typeof a!="number")var i=Rr(n),a=i.length; -else Pr.unindexedChars&&mt(n)&&(u=n.split(""));return t=_.createCallback(t,e,4),kt(n,function(n,e,f){e=i?i[--a]:--a,r=o?(o=b,u[e]):t(r,u[e],e,f)}),r}function St(n,t,r){var e;if(t=_.createCallback(t,r),$r(n)){r=-1;for(var u=n.length;++r=O&&u===t;if(l){var c=o(i);c?(u=r,i=c):l=b}for(;++eu(i,c)&&f.push(c);return l&&g(i),f}function It(n,t,r){if(n){var e=0,u=n.length; -if(typeof t!="number"&&t!=d){var a=-1;for(t=_.createCallback(t,r);++ae?kr(0,u+e):e||0}else if(e)return e=Nt(n,r),n[e]===r?e:-1;return n?t(n,r,e):-1}function Pt(n,t,r){if(typeof t!="number"&&t!=d){var e=0,u=-1,a=n?n.length:0;for(t=_.createCallback(t,r);++u>>1,r(n[e])r?0:r);++tl&&(i=n.apply(f,o));else{var r=new Jt;!s&&!h&&(c=r);var e=p-(r-c);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:z,variable:"",imports:{_:_}};var Nr={a:"x,F,k",h:"var a=arguments,b=0,c=typeof k=='number'?2:a.length;while(++b":">",'"':""","'":"'"},Wr=gt(Tr),Lr=Qt("("+Rr(Wr).join("|")+")","g"),Gr=Qt("["+Rr(Tr).join("")+"]","g"),Hr=at(Nr,{h:Nr.h.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=u.createCallback(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){d=a[--c]}"),f:"C[m]=d?d(C[m],r[m]):r[m]"}),Jr=at(Nr),Kr=at(zr,Fr,{i:b}),Mr=at(zr,Fr); -vt(/x/)&&(vt=function(n){return typeof n=="function"&&yr.call(n)==J});var Ur=cr?function(n){if(!n||yr.call(n)!=M||!Pr.argsClass&&pt(n))return b;var t=n.valueOf,r=typeof t=="function"&&(r=cr(t))&&cr(r);return r?n==r||cr(n)==r:lt(n)}:lt,Vr=wt;Ar&&nt&&typeof vr=="function"&&(qt=Dt(vr,e));var Qr=8==xr(S+"08")?xr:function(n,t){return xr(mt(n)?n.replace(F,""):n,t||0)};return _.after=function(n,t){return function(){return 1>--n?t.apply(this,arguments):void 0}},_.assign=Hr,_.at=function(n){var t=-1,r=Y(arguments,m,b,1),e=r.length,u=Gt(e); +e+="}"}return(n.b||Pr.nonEnumArgs)&&(e+="}"),e+=n.c+";return C",t=t("i,j,l,indicatorObject,n,o,q,t,u,y,z,w,G,H,J",r+e+"}"),g(n),t(H,nr,cr,w,pt,$r,mt,n.j&&Rr,_,tr,X,Br,V,rr,hr)}function ot(n){return ht(n)?dr(n):{}}function it(n){return Tr[n]}function ft(){var n=(n=_.indexOf)===Bt?t:n;return n}function lt(n){var t,r;return!n||hr.call(n)!=M||(t=n.constructor,vt(t)&&!(t instanceof t))||!Pr.argsClass&&pt(n)||!Pr.nodeClass&&c(n)?b:Pr.ownLast?(Kr(n,function(n,t,e){return r=cr.call(e,t),b}),r!==false):(Kr(n,function(n,t){r=t +}),r===y||cr.call(n,r))}function ct(n){return Wr[n]}function pt(n){return n&&typeof n=="object"?hr.call(n)==T:b}function st(n){var t=[];return Kr(n,function(n,r){vt(n)&&t.push(r)}),t.sort()}function gt(n){for(var t=-1,r=Rr(n),e=r.length,u={};++tr?wr(0,a+r):r)||0,a&&typeof a=="number"?o=-1<(mt(n)?n.indexOf(t,r):u(n,t,r)):qr(n,function(n){return++ea&&(a=i)}}else t=!t&&mt(n)?u:_.createCallback(t,r,3),qr(n,function(n,r,u){r=t(n,r,u),r>e&&(e=r,a=n)});return a}function Ot(n,t,r,e){var u=3>arguments.length;if(t=_.createCallback(t,e,4),$r(n)){var a=-1,o=n.length;for(u&&(r=n[++a]);++aarguments.length; +if(typeof a!="number")var i=Rr(n),a=i.length;else Pr.unindexedChars&&mt(n)&&(u=n.split(""));return t=_.createCallback(t,e,4),wt(n,function(n,e,f){e=i?i[--a]:--a,r=o?(o=b,u[e]):t(r,u[e],e,f)}),r}function St(n,t,r){var e;if(t=_.createCallback(t,r,3),$r(n)){r=-1;for(var u=n.length;++r=O&&u===t;if(l){var c=o(i);c?(u=r,i=c):l=b}for(;++eu(i,c)&&f.push(c); +return l&&g(i),f}function It(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=-1;for(t=_.createCallback(t,r,3);++ae?wr(0,u+e):e||0}else if(e)return e=Nt(n,r),n[e]===r?e:-1;return n?t(n,r,e):-1}function Pt(n,t,r){if(typeof t!="number"&&t!=d){var e=0,u=-1,a=n?n.length:0;for(t=_.createCallback(t,r,3);++u>>1,r(n[e])r?0:r);++tl&&(i=n.apply(f,o));else{var r=new Jt; +!s&&!h&&(c=r);var e=p-(r-c);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:z,variable:"",imports:{_:_}};var Nr={a:"x,F,k",h:"var a=arguments,b=0,c=typeof k=='number'?2:a.length;while(++b":">",'"':""","'":"'"},Wr=gt(Tr),Lr=Qt("("+Rr(Wr).join("|")+")","g"),Gr=Qt("["+Rr(Tr).join("")+"]","g"),Hr=at(Nr,{h:Nr.h.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=u.createCallback(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){d=a[--c]}"),f:"C[m]=d?d(C[m],r[m]):r[m]"}),Jr=at(Nr),Kr=at(zr,Fr,{i:b}),Mr=at(zr,Fr); +vt(/x/)&&(vt=function(n){return typeof n=="function"&&hr.call(n)==J});var Ur=lr?function(n){if(!n||hr.call(n)!=M||!Pr.argsClass&&pt(n))return b;var t=n.valueOf,r=typeof t=="function"&&(r=lr(t))&&lr(r);return r?n==r||lr(n)==r:lt(n)}:lt,Vr=kt;Ar&&nt&&typeof gr=="function"&&(qt=Dt(gr,e));var Qr=8==xr(S+"08")?xr:function(n,t){return xr(mt(n)?n.replace(F,""):n,t||0)};return _.after=function(n,t){return function(){return 1>--n?t.apply(this,arguments):void 0}},_.assign=Hr,_.at=function(n){var t=-1,r=Y(arguments,m,b,1),e=r.length,u=Gt(e); for(Pr.unindexedChars&&mt(n)&&(n=n.split(""));++t=O&&o(a?e[a]:h)}n:for(;++l(m?r(m,y):c(h,y))){for(a=u,(m||h).push(y);--a;)if(m=i[a],0>(m?r(m,y):c(e[a],y)))continue n; -v.push(y)}}for(;u--;)(m=i[u])&&g(m);return s(i),s(h),v},_.invert=gt,_.invoke=function(n,t){var r=Er.call(arguments,2),e=-1,u=typeof t=="function",a=n?n.length:0,o=Gt(typeof a=="number"?a:0);return kt(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},_.keys=Rr,_.map=wt,_.max=xt,_.memoize=function(n,t){function r(){var e=r.cache,u=x+(t?t.apply(this,arguments):arguments[0]);return pr.call(e,u)?e[u]:e[u]=n.apply(this,arguments)}return r.cache={},r},_.merge=function(n){var t=arguments,r=2;if(!ht(n))return n; -if("number"!=typeof t[2]&&(r=t.length),3e(o,r))&&(a[r]=n)}),a},_.once=function(n){var t,r;return function(){return t?r:(t=m,r=n.apply(this,arguments),n=d,r)}},_.pairs=function(n){for(var t=-1,r=Rr(n),e=r.length,u=Gt(e);++tr?kr(0,e+r):wr(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},_.mixin=Wt,_.noConflict=function(){return e._=er,this -},_.parseInt=Qr,_.random=function(n,t){n==d&&t==d&&(t=1),n=+n||0,t==d?(t=n,n=0):t=+t||0;var r=Or();return n%1||t%1?n+wr(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+lr(r*(t-n+1))},_.reduce=Ot,_.reduceRight=Et,_.result=function(n,t){var r=n?n[t]:y;return vt(r)?n[t]():r},_.runInContext=h,_.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rr(n).length},_.some=St,_.sortedIndex=Nt,_.template=function(n,t,r){var e=_.templateSettings;n||(n=""),r=Jr({},r,e);var u,a=Jr({},r.imports,e.imports),e=Rr(a),a=dt(a),o=0,f=r.interpolate||$,l="__p+='",f=Qt((r.escape||$).source+"|"+f.source+"|"+(f===z?P:$).source+"|"+(r.evaluate||$).source+"|$","g"); +return t[0]}},_.countBy=function(n,t,r){var e={};return t=_.createCallback(t,r,3),wt(n,function(n,r,u){r=Xt(t(n,r,u)),cr.call(e,r)?e[r]++:e[r]=1}),e},_.createCallback=function(n,t,r){if(n==d)return Tt;var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=Rr(n),a=u[0],o=n[a];return 1!=u.length||o!==o||ht(o)?function(t){for(var r=u.length,e=b;r--&&(e=Z(t[u[r]],n[u[r]],d,m)););return e}:function(n){return n=n[a],o===n&&(0!==o||1/o==1/n)}}if(typeof t=="undefined")return n; +switch(r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,a){return n.call(t,r,e,u,a)}}return function(){return n.apply(t,arguments)}},_.debounce=Rt,_.defaults=Jr,_.defer=qt,_.delay=function(n,t){var r=Er.call(arguments,2);return vr(function(){n.apply(y,r)},t)},_.difference=At,_.filter=jt,_.flatten=function(n,t,r,e){return typeof t!="boolean"&&t!=d&&(e=r,r=e&&e[t]===n?y:t,t=b),r!=d&&(n=kt(n,r,e)),Y(n,t) +},_.forEach=wt,_.forIn=Kr,_.forOwn=Mr,_.functions=st,_.groupBy=function(n,t,r){var e={};return t=_.createCallback(t,r,3),wt(n,function(n,r,u){r=Xt(t(n,r,u)),(cr.call(e,r)?e[r]:e[r]=[]).push(n)}),e},_.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=u;for(t=_.createCallback(t,r,3);a--&&t(n[a],a,n);)e++}else e=t==d||r?1:t||e;return v(n,0,kr(wr(0,u-e),u))},_.intersection=function(n){for(var e=arguments,u=e.length,a=-1,i=f(),l=-1,c=ft(),p=n?n.length:0,v=[],h=f();++a=O&&o(a?e[a]:h)}n:for(;++l(m?r(m,y):c(h,y))){for(a=u,(m||h).push(y);--a;)if(m=i[a],0>(m?r(m,y):c(e[a],y)))continue n;v.push(y)}}for(;u--;)(m=i[u])&&g(m);return s(i),s(h),v},_.invert=gt,_.invoke=function(n,t){var r=Er.call(arguments,2),e=-1,u=typeof t=="function",a=n?n.length:0,o=Gt(typeof a=="number"?a:0);return wt(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},_.keys=Rr,_.map=kt,_.max=xt,_.memoize=function(n,t){function r(){var e=r.cache,u=x+(t?t.apply(this,arguments):arguments[0]); +return cr.call(e,u)?e[u]:e[u]=n.apply(this,arguments)}return r.cache={},r},_.merge=function(n){var t=arguments,r=2;if(!ht(n))return n;if("number"!=typeof t[2]&&(r=t.length),3e(o,r))&&(a[r]=n)}),a},_.once=function(n){var t,r;return function(){return t?r:(t=m,r=n.apply(this,arguments),n=d,r)}},_.pairs=function(n){for(var t=-1,r=Rr(n),e=r.length,u=Gt(e);++tr?wr(0,e+r):kr(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},_.mixin=Wt,_.noConflict=function(){return e._=er,this},_.parseInt=Qr,_.random=function(n,t){n==d&&t==d&&(t=1),n=+n||0,t==d?(t=n,n=0):t=+t||0;var r=Or(); +return n%1||t%1?n+kr(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+fr(r*(t-n+1))},_.reduce=Ot,_.reduceRight=Et,_.result=function(n,t){var r=n?n[t]:y;return vt(r)?n[t]():r},_.runInContext=h,_.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rr(n).length},_.some=St,_.sortedIndex=Nt,_.template=function(n,t,r){var e=_.templateSettings;n||(n=""),r=Jr({},r,e);var u,a=Jr({},r.imports,e.imports),e=Rr(a),a=dt(a),o=0,f=r.interpolate||$,l="__p+='",f=Qt((r.escape||$).source+"|"+f.source+"|"+(f===z?P:$).source+"|"+(r.evaluate||$).source+"|$","g"); n.replace(f,function(t,r,e,a,f,c){return e||(e=a),l+=n.slice(o,c).replace(D,i),r&&(l+="'+__e("+r+")+'"),f&&(u=m,l+="';"+f+";__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),o=c+t.length,t}),l+="';\n",f=r=r.variable,f||(r="obj",l="with("+r+"){"+l+"}"),l=(u?l.replace(A,""):l).replace(I,"$1").replace(B,"$1;"),l="function("+r+"){"+(f?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var c=Kt(e,"return "+l).apply(y,a) -}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},_.unescape=function(n){return n==d?"":Xt(n).replace(Lr,ct)},_.uniqueId=function(n){var t=++C;return Xt(n==d?"":n)+t},_.all=_t,_.any=St,_.detect=Ct,_.findWhere=Ct,_.foldl=Ot,_.foldr=Et,_.include=bt,_.inject=Ot,Mr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(){var t=[this.__wrapped__];return sr.apply(t,arguments),n.apply(_,t)})}),_.first=It,_.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=u;for(t=_.createCallback(t,r);a--&&t(n[a],a,n);)e++ -}else if(e=t,e==d||r)return n[u-1];return v(n,kr(0,u-e))}},_.take=It,_.head=It,Mr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(t,r){var e=n(this.__wrapped__,t,r);return t==d||r&&typeof t!="function"?e:new j(e)})}),_.VERSION="1.3.1",_.prototype.toString=function(){return Xt(this.__wrapped__)},_.prototype.value=Lt,_.prototype.valueOf=Lt,qr(["join","pop","shift"],function(n){var t=Zt[n];_.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),qr(["push","reverse","sort","unshift"],function(n){var t=Zt[n]; +}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},_.unescape=function(n){return n==d?"":Xt(n).replace(Lr,ct)},_.uniqueId=function(n){var t=++C;return Xt(n==d?"":n)+t},_.all=_t,_.any=St,_.detect=Ct,_.findWhere=Ct,_.foldl=Ot,_.foldr=Et,_.include=bt,_.inject=Ot,Mr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(){var t=[this.__wrapped__];return pr.apply(t,arguments),n.apply(_,t)})}),_.first=It,_.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&t!=d){var a=u;for(t=_.createCallback(t,r,3);a--&&t(n[a],a,n);)e++ +}else if(e=t,e==d||r)return n[u-1];return v(n,wr(0,u-e))}},_.take=It,_.head=It,Mr(_,function(n,t){_.prototype[t]||(_.prototype[t]=function(t,r){var e=n(this.__wrapped__,t,r);return t==d||r&&typeof t!="function"?e:new j(e)})}),_.VERSION="1.3.1",_.prototype.toString=function(){return Xt(this.__wrapped__)},_.prototype.value=Lt,_.prototype.valueOf=Lt,qr(["join","pop","shift"],function(n){var t=Zt[n];_.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),qr(["push","reverse","sort","unshift"],function(n){var t=Zt[n]; _.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),qr(["concat","slice","splice"],function(n){var t=Zt[n];_.prototype[n]=function(){return new j(t.apply(this.__wrapped__,arguments))}}),Pr.spliceObjects||qr(["pop","shift","splice"],function(n){var t=Zt[n],r="splice"==n;_.prototype[n]=function(){var n=this.__wrapped__,e=t.apply(n,arguments);return 0===n.length&&delete n[0],r?new j(e):e}}),_}var y,m=!0,d=null,b=!1,_=[],j=[],C=0,w={},x=+new Date+"",O=75,E=40,S=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",A=/\b__p\+='';/g,I=/\b(__p\+=)''\+/g,B=/(__e\(.*?\)|\b__t\))\+'';/g,P=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,N=/\w*$/,z=/<%=([\s\S]+?)%>/g,F=RegExp("^["+S+"]*0+(?=.$)"),$=/($^)/,D=/['\n\r\t\u2028\u2029\\]/g,R="Array Boolean Date Error Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),q="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),T="[object Arguments]",W="[object Array]",L="[object Boolean]",G="[object Date]",H="[object Error]",J="[object Function]",K="[object Number]",M="[object Object]",U="[object RegExp]",V="[object String]",Q={}; Q[J]=b,Q[T]=Q[W]=Q[L]=Q[G]=Q[K]=Q[M]=Q[U]=Q[V]=m;var X={"boolean":b,"function":m,object:m,number:b,string:b,undefined:b},Y={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},Z=X[typeof exports]&&exports,nt=X[typeof module]&&module&&module.exports==Z&&module,tt=X[typeof global]&&global;!tt||tt.global!==tt&&tt.window!==tt||(n=tt);var rt=h();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=rt, define(function(){return rt})):Z&&!Z.nodeType?nt?(nt.exports=rt)._=rt:Z._=rt:n._=rt }(this); \ No newline at end of file diff --git a/dist/lodash.js b/dist/lodash.js index 79a4e65da..c2f2e1124 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -450,7 +450,6 @@ /** Native method shortcuts */ var ceil = Math.ceil, clearTimeout = context.clearTimeout, - concat = arrayRef.concat, defineProperty = reNative.test(defineProperty = Object.defineProperty) && defineProperty, floor = Math.floor, fnToString = Function.prototype.toString, @@ -459,7 +458,8 @@ push = arrayRef.push, setImmediate = context.setImmediate, setTimeout = context.setTimeout, - toString = objectProto.toString; + toString = objectProto.toString, + unshift = arrayRef.unshift; /* Native method shortcuts for methods with the same name as other `lodash` methods */ var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind, @@ -1078,9 +1078,7 @@ if (!isFunc && !isBindKey) { throw new TypeError; } - var args = func.__bindData__, - key = thisArg; - + var args = func.__bindData__; if (args) { push.apply(args[2], partialArgs); push.apply(args[3], partialRightArgs); @@ -1093,17 +1091,12 @@ } return createBound.apply(null, args); } - // take a snapshot of `arguments` before juggling - args = nativeSlice.call(arguments); - - // juggle arguments for `_.bindKey` behavior - if (isBindKey) { - thisArg = func; - } // use `Function#bind` if it exists and is fast // (in V8 `Function#bind` is slower except when partially applied) if (!isPartial && !isAlt && !partialRightArgs.length && (support.fastBind || (nativeBind && partialArgs.length))) { - var bound = nativeBind.call.apply(nativeBind, concat.call(arrayRef, func, thisArg, partialArgs)); + args = [func, thisArg]; + push.apply(args, partialArgs); + var bound = nativeBind.call.apply(nativeBind, args); } else { bound = function() { @@ -1116,7 +1109,7 @@ func = thisArg[key]; } if (partialArgs.length || partialRightArgs.length) { - args = concat.apply(partialArgs, args); + unshift.apply(args, partialArgs); push.apply(args, partialRightArgs); } if (this instanceof bound) { @@ -1131,6 +1124,12 @@ return func.apply(thisBinding, args); }; } + // take a snapshot of `arguments` before juggling + args = nativeSlice.call(arguments); + if (isBindKey) { + var key = thisArg; + thisArg = func; + } setBindData(bound, args); return bound; } @@ -1548,7 +1547,7 @@ */ function findKey(object, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forOwn(object, function(value, key, object) { if (callback(value, key, object)) { result = key; @@ -1591,7 +1590,7 @@ var index, iterable = collection, result = iterable; if (!iterable) return result; if (!objectTypes[typeof iterable]) return result; - callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3); for (index in iterable) { if (callback(iterable[index], index, collection) === false) return result; } @@ -1623,7 +1622,7 @@ var index, iterable = collection, result = iterable; if (!iterable) return result; if (!objectTypes[typeof iterable]) return result; - callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3); var ownIndex = -1, ownProps = objectTypes[typeof iterable] && keys(iterable), length = ownProps ? ownProps.length : 0; @@ -2184,7 +2183,7 @@ result = {}; if (isFunc) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } else { var props = baseFlatten(arguments, true, false, 1); } @@ -2266,7 +2265,7 @@ } } } else { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forIn(object, function(value, key, object) { if (callback(value, key, object)) { result[key] = value; @@ -2471,7 +2470,7 @@ */ function countBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -2523,7 +2522,7 @@ */ function every(collection, callback, thisArg) { var result = true; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -2584,7 +2583,7 @@ */ function filter(collection, callback, thisArg) { var result = []; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -2650,7 +2649,7 @@ * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' } */ function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -2700,7 +2699,7 @@ var index = -1, length = collection ? collection.length : 0; - callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3); if (typeof length == 'number') { while (++index < length) { if (callback(collection[index], index, collection) === false) { @@ -2749,7 +2748,7 @@ */ function groupBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -2836,7 +2835,7 @@ var index = -1, length = collection ? collection.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (typeof length == 'number') { var result = Array(length); while (++index < length) { @@ -2907,7 +2906,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -2976,7 +2975,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -3155,7 +3154,7 @@ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }] */ function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); return filter(collection, function(value, index, collection) { return !callback(value, index, collection); }); @@ -3257,7 +3256,7 @@ */ function some(collection, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -3316,7 +3315,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { var object = result[++index] = getObject(); object.criteria = callback(value, key, collection); @@ -3480,7 +3479,7 @@ var index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length) { if (callback(array[index], index, array)) { return index; @@ -3553,7 +3552,7 @@ if (typeof callback != 'number' && callback != null) { var index = -1; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -3721,7 +3720,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -3854,7 +3853,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -4014,7 +4013,7 @@ index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -4158,7 +4157,7 @@ isSorted = false; } if (callback != null) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } return baseUniq(array, isSorted, callback); } @@ -4418,7 +4417,7 @@ * @category Functions * @param {Mixed} [func=identity] The value to convert to a callback. * @param {Mixed} [thisArg] The `this` binding of the created callback. - * @param {Number} [argCount=3] The number of arguments the callback accepts. + * @param {Number} [argCount] The number of arguments the callback accepts. * @returns {Function} Returns a callback function. * @example * @@ -4502,23 +4501,22 @@ // created by `_.partial` or `_.partialRight` return bindData[4] ? bind(func, thisArg) : func; } - if (argCount === 1) { - return function(value) { + switch (argCount) { + case 1: return function(value) { return func.call(thisArg, value); }; - } - if (argCount === 2) { - return function(a, b) { + case 2: return function(a, b) { return func.call(thisArg, a, b); }; - } - if (argCount === 4) { - return function(accumulator, value, index, collection) { + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { return func.call(thisArg, accumulator, value, index, collection); }; } - return function(value, index, collection) { - return func.call(thisArg, value, index, collection); + return function() { + return func.apply(thisArg, arguments); }; } diff --git a/dist/lodash.min.js b/dist/lodash.min.js index 0e74ac7cc..689c7cd0e 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -5,43 +5,43 @@ */ ;!function(n){function t(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++et||typeof n=="undefined")return 1;if(ne?0:e);++r=j&&i===t,g=u||v?f():s;if(v){var y=o(g);y?(i=e,g=y):(v=b,g=u?g:(c(g),s))}for(;++ai(g,h))&&((u||v)&&g.push(h),s.push(y))}return v?(c(g.b),p(g)):u&&c(g),s}function at(n,t,e,r,u,a){var o=a&&!u;if(!gt(n)&&!o)throw new Zt;var i=n.__bindData__,f=t;if(i)return se.apply(i[2],e),se.apply(i[3],r),!u&&i[4]&&(i[1]=t,i[4]=b,i[5]=a),at.apply(h,i);i=Oe.call(arguments),o&&(t=n);var l=u||a||r.length||!(Ie.fastBind||he&&e.length)?function(){var a=arguments,i=u?this:t; -return o&&(n=t[f]),(e.length||r.length)&&(a=oe.apply(e,a),se.apply(a,r)),this instanceof l?(i=yt(n.prototype)?be(n.prototype):{},a=n.apply(i,a),yt(a)?a:i):n.apply(i,a)}:he.call.apply(he,oe.call(ne,n,t,e));return ft(l,i),l}function ot(n){return Be[n]}function it(){var n=(n=Y.indexOf)===$t?t:n;return n}function ft(n,t){ie(n,"__bindData__",{configurable:b,enumerable:b,value:t,writable:b})}function lt(n){var t,e;return n&&ye.call(n)==K&&(t=n.constructor,!gt(t)||t instanceof t)?(w(n,function(n,t){e=t}),e===g||pe.call(n,e)):b -}function ct(n){return De[n]}function pt(n){return n&&typeof n=="object"?ye.call(n)==R:b}function st(n){var t=[];return w(n,function(n,e){gt(n)&&t.push(e)}),t.sort()}function vt(n){for(var t=-1,e=$e(n),r=e.length,u={};++te?je(0,a+e):e)||0,a&&typeof a=="number"?o=-1<(bt(n)?n.indexOf(t,e):u(n,t,e)):d(n,function(n){return++ra&&(a=i)}}else t=!t&&bt(n)?u:Y.createCallback(t,e),wt(n,function(n,e,u){e=t(n,e,u),e>r&&(r=e,a=n)});return a}function Ot(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Ut(r);++earguments.length;t=Y.createCallback(t,r,4);var a=-1,o=n.length;if(typeof o=="number")for(u&&(e=n[++a]);++aarguments.length;if(typeof u!="number")var o=$e(n),u=o.length;return t=Y.createCallback(t,r,4),wt(n,function(r,i,f){i=o?o[--u]:--u,e=a?(a=b,n[i]):t(e,n[i],i,f)}),e}function At(n,t,e){var r;t=Y.createCallback(t,e),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e=j&&u===t; -if(l){var c=o(i);c?(u=e,i=c):l=b}for(;++ru(i,c)&&f.push(c);return l&&p(i),f}function Nt(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&t!=h){var a=-1;for(t=Y.createCallback(t,e);++ar?je(0,u+r):r||0}else if(r)return r=Dt(n,e),n[r]===e?r:-1;return n?t(n,e,r):-1}function Bt(n,t,e){if(typeof t!="number"&&t!=h){var r=0,u=-1,a=n?n.length:0; -for(t=Y.createCallback(t,e);++u>>1,e(n[r])e?0:e);++te?0:e);++r=j&&i===t,g=u||v?f():s;if(v){var y=o(g);y?(i=e,g=y):(v=b,g=u?g:(c(g),s))}for(;++ai(g,h))&&((u||v)&&g.push(h),s.push(y))}return v?(c(g.b),p(g)):u&&c(g),s}function at(n,t,e,r,u,a){var o=a&&!u;if(!gt(n)&&!o)throw new Zt;var i=n.__bindData__;if(i)return pe.apply(i[2],e),pe.apply(i[3],r),!u&&i[4]&&(i[1]=t,i[4]=b,i[5]=a),at.apply(h,i);if(u||a||r.length||!(Ie.fastBind||he&&e.length))f=function(){var a=arguments,i=u?this:t; +return o&&(n=t[l]),(e.length||r.length)&&(ye.apply(a,e),pe.apply(a,r)),this instanceof f?(i=yt(n.prototype)?be(n.prototype):{},a=n.apply(i,a),yt(a)?a:i):n.apply(i,a)};else{i=[n,t],pe.apply(i,e);var f=he.call.apply(he,i)}if(i=Oe.call(arguments),o){var l=t;t=n}return ft(f,i),f}function ot(n){return Be[n]}function it(){var n=(n=Y.indexOf)===$t?t:n;return n}function ft(n,t){oe(n,"__bindData__",{configurable:b,enumerable:b,value:t,writable:b})}function lt(n){var t,e;return n&&ge.call(n)==K&&(t=n.constructor,!gt(t)||t instanceof t)?(w(n,function(n,t){e=t +}),e===g||ce.call(n,e)):b}function ct(n){return De[n]}function pt(n){return n&&typeof n=="object"?ge.call(n)==R:b}function st(n){var t=[];return w(n,function(n,e){gt(n)&&t.push(e)}),t.sort()}function vt(n){for(var t=-1,e=$e(n),r=e.length,u={};++te?je(0,a+e):e)||0,a&&typeof a=="number"?o=-1<(bt(n)?n.indexOf(t,e):u(n,t,e)):d(n,function(n){return++ra&&(a=i)}}else t=!t&&bt(n)?u:Y.createCallback(t,e,3),wt(n,function(n,e,u){e=t(n,e,u),e>r&&(r=e,a=n)});return a}function Ot(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Ut(r);++earguments.length;t=Y.createCallback(t,r,4);var a=-1,o=n.length;if(typeof o=="number")for(u&&(e=n[++a]);++aarguments.length;if(typeof u!="number")var o=$e(n),u=o.length;return t=Y.createCallback(t,r,4),wt(n,function(r,i,f){i=o?o[--u]:--u,e=a?(a=b,n[i]):t(e,n[i],i,f)}),e}function At(n,t,e){var r;t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e=j&&u===t; +if(l){var c=o(i);c?(u=e,i=c):l=b}for(;++ru(i,c)&&f.push(c);return l&&p(i),f}function Nt(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&t!=h){var a=-1;for(t=Y.createCallback(t,e,3);++ar?je(0,u+r):r||0}else if(r)return r=Dt(n,e),n[r]===e?r:-1;return n?t(n,e,r):-1}function Bt(n,t,e){if(typeof t!="number"&&t!=h){var r=0,u=-1,a=n?n.length:0; +for(t=Y.createCallback(t,e,3);++u>>1,e(n[r])e?0:e);++tl&&(i=n.apply(f,o)); -else{var e=new Gt;!s&&!m&&(c=e);var r=p-(e-c);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:I,variable:"",imports:{_:Y}};var Ne=me,$e=ke?function(n){return yt(n)?ke(n):[]}:Q,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},De=vt(Be),Fe=Xt("("+$e(De).join("|")+")","g"),Re=Xt("["+$e(Be).join("")+"]","g");Se&&L&&typeof ve=="function"&&(Wt=qt(ve,r));var Te=8==Ce(C+"08")?Ce:function(n,t){return Ce(bt(n)?n.replace(N,""):n,t||0) +else{var e=new Gt;!s&&!m&&(c=e);var r=p-(e-c);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:I,variable:"",imports:{_:Y}};var Ne=me,$e=ke?function(n){return yt(n)?ke(n):[]}:Q,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},De=vt(Be),Fe=Xt("("+$e(De).join("|")+")","g"),Re=Xt("["+$e(Be).join("")+"]","g");Se&&L&&typeof se=="function"&&(Wt=qt(se,r));var Te=8==Ce(C+"08")?Ce:function(n,t){return Ce(bt(n)?n.replace(N,""):n,t||0) };return Y.after=function(n,t){return function(){return 1>--n?t.apply(this,arguments):void 0}},Y.assign=J,Y.at=function(n){for(var t=-1,e=tt(arguments,y,b,1),r=e.length,u=Ut(r);++t=j&&o(a?r[a]:y)}n:for(;++l(b?e(b,h):s(y,h))){for(a=u,(b||y).push(h);--a;)if(b=i[a],0>(b?e(b,h):s(r[a],h)))continue n;g.push(h)}}for(;u--;)(b=i[u])&&p(b);return c(i),c(y),g},Y.invert=vt,Y.invoke=function(n,t){var e=Oe.call(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Ut(typeof a=="number"?a:0);return wt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},Y.keys=$e,Y.map=Ct,Y.max=xt,Y.memoize=function(n,t){function e(){var r=e.cache,u=k+(t?t.apply(this,arguments):arguments[0]); -return pe.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}return e.cache={},e},Y.merge=function(n){var t=arguments,e=2;if(!yt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3r(o,e))&&(a[e]=n)}),a},Y.once=function(n){var t,e;return function(){return t?e:(t=y,e=n.apply(this,arguments),n=h,e)}},Y.pairs=function(n){for(var t=-1,e=$e(n),r=e.length,u=Ut(r);++te?je(0,r+e):we(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Y.mixin=Kt,Y.noConflict=function(){return r._=ee,this},Y.parseInt=Te,Y.random=function(n,t){n==h&&t==h&&(t=1),n=+n||0,t==h?(t=n,n=0):t=+t||0;var e=xe();return n%1||t%1?n+we(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+fe(e*(t-n+1))},Y.reduce=Et,Y.reduceRight=St,Y.result=function(n,t){var e=n?n[t]:g; -return gt(e)?n[t]():e},Y.runInContext=v,Y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:$e(n).length},Y.some=At,Y.sortedIndex=Dt,Y.template=function(n,t,e){var r=Y.templateSettings;n||(n=""),e=H({},e,r);var u,a=H({},e.imports,r.imports),r=$e(a),a=mt(a),o=0,f=e.interpolate||$,l="__p+='",f=Xt((e.escape||$).source+"|"+f.source+"|"+(f===I?S:$).source+"|"+(e.evaluate||$).source+"|$","g");n.replace(f,function(t,e,r,a,f,c){return r||(r=a),l+=n.slice(o,c).replace(D,i),e&&(l+="'+__e("+e+")+'"),f&&(u=y,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),o=c+t.length,t +}return r},Y.compose=function(){var n=arguments;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Y.countBy=function(n,t,e){var r={};return t=Y.createCallback(t,e,3),wt(n,function(n,e,u){e=Yt(t(n,e,u)),ce.call(r,e)?r[e]++:r[e]=1}),r},Y.createCallback=function(n,t,e){if(n==h)return Pt;var r=typeof n;if("function"!=r){if("object"!=r)return function(t){return t[n]};var u=$e(n),a=u[0],o=n[a];return 1!=u.length||o!==o||yt(o)?function(t){for(var e=u.length,r=b;e--&&(r=et(t[u[e]],n[u[e]],h,y)););return r +}:function(n){return n=n[a],o===n&&(0!==o||1/o==1/n)}}if(r=n.__bindData__,typeof r=="undefined"&&(r=!B||B.test(fe.call(n)),ft(n,r)),typeof t=="undefined"||!r)return n;if(r!==y)return r[4]?qt(n,t):n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,a){return n.call(t,e,r,u,a)}}return function(){return n.apply(t,arguments)}},Y.debounce=zt,Y.defaults=H,Y.defer=Wt,Y.delay=function(n,t){var e=Oe.call(arguments,2); +return ve(function(){n.apply(g,e)},t)},Y.difference=It,Y.filter=kt,Y.flatten=function(n,t,e,r){return typeof t!="boolean"&&t!=h&&(r=e,e=r&&r[t]===n?g:t,t=b),e!=h&&(n=Ct(n,e,r)),tt(n,t)},Y.forEach=wt,Y.forIn=w,Y.forOwn=d,Y.functions=st,Y.groupBy=function(n,t,e){var r={};return t=Y.createCallback(t,e,3),wt(n,function(n,e,u){e=Yt(t(n,e,u)),(ce.call(r,e)?r[e]:r[e]=[]).push(n)}),r},Y.initial=function(n,t,e){if(!n)return[];var r=0,u=n.length;if(typeof t!="number"&&t!=h){var a=u;for(t=Y.createCallback(t,e,3);a--&&t(n[a],a,n);)r++ +}else r=t==h||e?1:t||r;return s(n,0,we(je(0,u-r),u))},Y.intersection=function(n){for(var r=arguments,u=r.length,a=-1,i=f(),l=-1,s=it(),v=n?n.length:0,g=[],y=f();++a=j&&o(a?r[a]:y)}n:for(;++l(b?e(b,h):s(y,h))){for(a=u,(b||y).push(h);--a;)if(b=i[a],0>(b?e(b,h):s(r[a],h)))continue n;g.push(h)}}for(;u--;)(b=i[u])&&p(b);return c(i),c(y),g},Y.invert=vt,Y.invoke=function(n,t){var e=Oe.call(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Ut(typeof a=="number"?a:0); +return wt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},Y.keys=$e,Y.map=Ct,Y.max=xt,Y.memoize=function(n,t){function e(){var r=e.cache,u=k+(t?t.apply(this,arguments):arguments[0]);return ce.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}return e.cache={},e},Y.merge=function(n){var t=arguments,e=2;if(!yt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3r(o,e))&&(a[e]=n)}),a},Y.once=function(n){var t,e;return function(){return t?e:(t=y,e=n.apply(this,arguments),n=h,e) +}},Y.pairs=function(n){for(var t=-1,e=$e(n),r=e.length,u=Ut(r);++te?je(0,r+e):we(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Y.mixin=Kt,Y.noConflict=function(){return r._=ee,this},Y.parseInt=Te,Y.random=function(n,t){n==h&&t==h&&(t=1),n=+n||0,t==h?(t=n,n=0):t=+t||0;var e=xe();return n%1||t%1?n+we(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+ie(e*(t-n+1)) +},Y.reduce=Et,Y.reduceRight=St,Y.result=function(n,t){var e=n?n[t]:g;return gt(e)?n[t]():e},Y.runInContext=v,Y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:$e(n).length},Y.some=At,Y.sortedIndex=Dt,Y.template=function(n,t,e){var r=Y.templateSettings;n||(n=""),e=H({},e,r);var u,a=H({},e.imports,r.imports),r=$e(a),a=mt(a),o=0,f=e.interpolate||$,l="__p+='",f=Xt((e.escape||$).source+"|"+f.source+"|"+(f===I?S:$).source+"|"+(e.evaluate||$).source+"|$","g");n.replace(f,function(t,e,r,a,f,c){return r||(r=a),l+=n.slice(o,c).replace(D,i),e&&(l+="'+__e("+e+")+'"),f&&(u=y,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),o=c+t.length,t }),l+="';\n",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(x,""):l).replace(O,"$1").replace(E,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var c=Ht(r,"return "+l).apply(g,a)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Y.unescape=function(n){return n==h?"":Yt(n).replace(Fe,ct)},Y.uniqueId=function(n){var t=++_;return Yt(n==h?"":n)+t -},Y.all=_t,Y.any=At,Y.detect=jt,Y.findWhere=jt,Y.foldl=Et,Y.foldr=St,Y.include=dt,Y.inject=Et,d(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(){var t=[this.__wrapped__];return se.apply(t,arguments),n.apply(Y,t)})}),Y.first=Nt,Y.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&t!=h){var a=u;for(t=Y.createCallback(t,e);a--&&t(n[a],a,n);)r++}else if(r=t,r==h||e)return n[u-1];return s(n,je(0,u-r))}},Y.take=Nt,Y.head=Nt,d(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e); +},Y.all=_t,Y.any=At,Y.detect=jt,Y.findWhere=jt,Y.foldl=Et,Y.foldr=St,Y.include=dt,Y.inject=Et,d(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(){var t=[this.__wrapped__];return pe.apply(t,arguments),n.apply(Y,t)})}),Y.first=Nt,Y.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&t!=h){var a=u;for(t=Y.createCallback(t,e,3);a--&&t(n[a],a,n);)r++}else if(r=t,r==h||e)return n[u-1];return s(n,je(0,u-r))}},Y.take=Nt,Y.head=Nt,d(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e); return t==h||e&&typeof t!="function"?r:new Z(r)})}),Y.VERSION="1.3.1",Y.prototype.toString=function(){return Yt(this.__wrapped__)},Y.prototype.value=Mt,Y.prototype.valueOf=Mt,wt(["join","pop","shift"],function(n){var t=ne[n];Y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),wt(["push","reverse","sort","unshift"],function(n){var t=ne[n];Y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),wt(["concat","slice","splice"],function(n){var t=ne[n];Y.prototype[n]=function(){return new Z(t.apply(this.__wrapped__,arguments)) }}),Y}var g,y=!0,h=null,b=!1,m=[],d=[],_=0,k=+new Date+"",j=75,w=40,C=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",x=/\b__p\+='';/g,O=/\b(__p\+=)''\+/g,E=/(__e\(.*?\)|\b__t\))\+'';/g,S=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,A=/\w*$/,I=/<%=([\s\S]+?)%>/g,N=RegExp("^["+C+"]*0+(?=.$)"),$=/($^)/,B=(B=/\bthis\b/)&&B.test(v)&&B,D=/['\n\r\t\u2028\u2029\\]/g,F="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),R="[object Arguments]",T="[object Array]",q="[object Boolean]",z="[object Date]",W="[object Function]",P="[object Number]",K="[object Object]",M="[object RegExp]",U="[object String]",V={}; V[W]=b,V[R]=V[T]=V[q]=V[z]=V[P]=V[K]=V[M]=V[U]=y;var G={"boolean":b,"function":y,object:y,number:b,string:b,undefined:b},H={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},J=G[typeof exports]&&exports,L=G[typeof module]&&module&&module.exports==J&&module,Q=G[typeof global]&&global;!Q||Q.global!==Q&&Q.window!==Q||(n=Q);var X=v();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=X, define(function(){return X})):J&&!J.nodeType?L?(L.exports=X)._=X:J._=X:n._=X diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index e5946e8df..3fbaf14cb 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -173,11 +173,11 @@ /** Native method shortcuts */ var ceil = Math.ceil, - concat = arrayRef.concat, floor = Math.floor, hasOwnProperty = objectProto.hasOwnProperty, push = arrayRef.push, - toString = objectProto.toString; + toString = objectProto.toString, + unshift = arrayRef.unshift; /* Native method shortcuts for methods with the same name as other `lodash` methods */ var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind, @@ -553,16 +553,12 @@ if (!isFunc && !isBindKey) { throw new TypeError; } - var key = thisArg; - - // juggle arguments for `_.bindKey` behavior - if (isBindKey) { - thisArg = func; - } // use `Function#bind` if it exists and is fast // (in V8 `Function#bind` is slower except when partially applied) if (!isPartial && !isAlt && !partialRightArgs.length && (support.fastBind || (nativeBind && partialArgs.length))) { - var bound = nativeBind.call.apply(nativeBind, concat.call(arrayRef, func, thisArg, partialArgs)); + args = [func, thisArg]; + push.apply(args, partialArgs); + var bound = nativeBind.call.apply(nativeBind, args); } else { bound = function() { @@ -575,7 +571,7 @@ func = thisArg[key]; } if (partialArgs.length || partialRightArgs.length) { - args = concat.apply(partialArgs, args); + unshift.apply(args, partialArgs); push.apply(args, partialRightArgs); } if (this instanceof bound) { @@ -590,6 +586,10 @@ return func.apply(thisBinding, args); }; } + if (isBindKey) { + var key = thisArg; + thisArg = func; + } return bound; } @@ -1578,7 +1578,7 @@ */ function countBy(collection, callback, thisArg) { var result = {}; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -1630,7 +1630,7 @@ */ function every(collection, callback, thisArg) { var result = true; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -1691,7 +1691,7 @@ */ function filter(collection, callback, thisArg) { var result = []; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -1757,7 +1757,7 @@ * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' } */ function find(collection, callback, thisArg) { - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -1834,7 +1834,7 @@ var index = -1, length = collection ? collection.length : 0; - callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg); + callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg, 3); if (typeof length == 'number') { while (++index < length) { if (callback(collection[index], index, collection) === indicatorObject) { @@ -1882,7 +1882,7 @@ */ function groupBy(collection, callback, thisArg) { var result = {}; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -1969,7 +1969,7 @@ var index = -1, length = collection ? collection.length : 0; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); if (typeof length == 'number') { var result = Array(length); while (++index < length) { @@ -2038,7 +2038,7 @@ } } } else { - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -2105,7 +2105,7 @@ } } } else { - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -2284,7 +2284,7 @@ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }] */ function reject(collection, callback, thisArg) { - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); return filter(collection, function(value, index, collection) { return !callback(value, index, collection); }); @@ -2386,7 +2386,7 @@ */ function some(collection, callback, thisArg) { var result; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); var index = -1, length = collection ? collection.length : 0; @@ -2445,7 +2445,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { result[++index] = { 'criteria': callback(value, key, collection), @@ -2641,7 +2641,7 @@ if (typeof callback != 'number' && callback != null) { var index = -1; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -2800,7 +2800,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -2912,7 +2912,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -3072,7 +3072,7 @@ index = -1, length = array ? array.length : 0; - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -3216,7 +3216,7 @@ isSorted = false; } if (callback != null) { - callback = createCallback(callback, thisArg); + callback = createCallback(callback, thisArg, 3); } return baseUniq(array, isSorted, callback); } @@ -3437,7 +3437,7 @@ * @category Functions * @param {Mixed} [func=identity] The value to convert to a callback. * @param {Mixed} [thisArg] The `this` binding of the created callback. - * @param {Number} [argCount=3] The number of arguments the callback accepts. + * @param {Number} [argCount] The number of arguments the callback accepts. * @returns {Function} Returns a callback function. * @example * @@ -3498,23 +3498,22 @@ if (typeof thisArg == 'undefined') { return func; } - if (argCount === 1) { - return function(value) { + switch (argCount) { + case 1: return function(value) { return func.call(thisArg, value); }; - } - if (argCount === 2) { - return function(a, b) { + case 2: return function(a, b) { return func.call(thisArg, a, b); }; - } - if (argCount === 4) { - return function(accumulator, value, index, collection) { + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { return func.call(thisArg, accumulator, value, index, collection); }; } - return function(value, index, collection) { - return func.call(thisArg, value, index, collection); + return function() { + return func.apply(thisArg, arguments); }; } diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index 4305cf9a5..a9a252589 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -3,33 +3,33 @@ * Lo-Dash 1.3.1 (Custom Build) lodash.com/license | Underscore.js 1.5.1 underscorejs.org/LICENSE * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js` */ -;!function(n){function t(n,t){var r;if(n&&ht[typeof n])for(r in n)if(Et.call(n,r)&&t(n[r],r,n)===et)break}function r(n,t){var r;if(n&&ht[typeof n])for(r in n)if(t(n[r],r,n)===et)break}function e(n){var t,r=[];if(!n||!ht[typeof n])return r;for(t in n)Et.call(n,t)&&r.push(t);return r}function u(n,t,r){r=(r||0)-1;for(var e=n?n.length:0;++rt||typeof n=="undefined")return 1;if(nu(a,c))&&(r&&a.push(c),o.push(f))}return o}function v(n,t,r,e){var u=[];if(!A(n))throw new TypeError;var i=e||u.length||!(zt.fastBind||Ft&&r.length)?function(){var o=arguments,a=e?this:t;return(r.length||u.length)&&(o=At.apply(r,o),Tt.apply(o,u)),this instanceof i?(a=g(n.prototype),o=n.apply(a,o),O(o)?o:a):n.apply(a,o) -}:Ft.call.apply(Ft,At.call(bt,n,t,r));return i}function g(n){return O(n)?Nt(n):{}}function h(n){return Ut[n]}function y(){var n=(n=f.indexOf)===U?u:n;return n}function m(n){return Vt[n]}function _(n){return n&&typeof n=="object"?St.call(n)==at:tt}function d(n){if(!n)return n;for(var t=1,r=arguments.length;te&&(e=r,u=n)});else for(;++iu&&(u=r);return u}function M(n,t){var r=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++rarguments.length;r=K(r,u,4);var o=-1,a=n.length;if(typeof a=="number")for(i&&(e=n[++o]);++oarguments.length; -if(typeof u!="number")var o=Pt(n),u=o.length;return t=K(t,e,4),B(n,function(e,a,f){a=o?o[--u]:--u,r=i?(i=tt,n[a]):t(r,n[a],a,f)}),r}function W(n,r,e){var u;r=K(r,e),e=-1;var i=n?n.length:0;if(typeof i=="number")for(;++er(u,o)&&i.push(o)}return i}function P(n,t,r){if(n){var e=0,u=n.length; -if(typeof t!="number"&&t!=nt){var i=-1;for(t=K(t,r);++ir?qt(0,e+r):r||0}else if(r)return r=G(n,t),n[r]===t?r:-1;return n?u(n,t,r):-1}function V(n,t,r){if(typeof t!="number"&&t!=nt){var e=0,u=-1,i=n?n.length:0;for(t=K(t,r);++u>>1,r(n[e])c&&(a=n.apply(f,o)); -else{var r=new Date;!s&&!h&&(l=r);var e=p-(r-l);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Nt||(g=function(n){if(O(n)){a.prototype=n;var t=new a;a.prototype=nt}return t||{}}),_(arguments)||(_=function(n){return n&&typeof n=="object"?Et.call(n,"callee"):tt});var Ct=Rt||function(n){return n&&typeof n=="object"?St.call(n)==ft:tt},Pt=Dt?function(n){return O(n)?Dt(n):[] -}:e,Ut={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},Vt=w(Ut),Gt=RegExp("("+Pt(Vt).join("|")+")","g"),Ht=RegExp("["+Pt(Ut).join("")+"]","g");A(/x/)&&(A=function(n){return typeof n=="function"&&"[object Function]"==St.call(n)}),f.after=function(n,t){return function(){return 1>--n?t.apply(this,arguments):void 0}},f.bind=J,f.bindAll=function(n){for(var t=1u(o,a)){for(var f=r;--f;)if(0>u(t[f],a))continue n; -o.push(a)}}return o},f.invert=w,f.invoke=function(n,t){var r=It.call(arguments,2),e=-1,u=typeof t=="function",i=n?n.length:0,o=Array(typeof i=="number"?i:0);return B(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},f.keys=Pt,f.map=D,f.max=q,f.memoize=function(n,t){var r={};return function(){var e=ut+(t?t.apply(this,arguments):arguments[0]);return Et.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},f.min=function(n,t,r){var e=1/0,u=e,i=-1,o=n?n.length:0;if(t||typeof o!="number")t=K(t,r),B(n,function(n,r,i){r=t(n,r,i),rt||typeof n=="undefined")return 1;if(nu(a,c))&&(r&&a.push(c),o.push(f))}return o}function v(n,t,r,e){var u=[];if(!A(n))throw new TypeError;if(e||u.length||!(zt.fastBind||Ft&&r.length))i=function(){var o=arguments,a=e?this:t;return(r.length||u.length)&&(St.apply(o,r),Et.apply(o,u)),this instanceof i?(a=g(n.prototype),o=n.apply(a,o),O(o)?o:a):n.apply(a,o) +};else{args=[n,t],Et.apply(args,r);var i=Ft.call.apply(Ft,args)}return i}function g(n){return O(n)?Nt(n):{}}function h(n){return Ut[n]}function y(){var n=(n=f.indexOf)===U?u:n;return n}function m(n){return Vt[n]}function _(n){return n&&typeof n=="object"?Tt.call(n)==at:tt}function d(n){if(!n)return n;for(var t=1,r=arguments.length;te&&(e=r,u=n)});else for(;++iu&&(u=r);return u}function M(n,t){var r=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++rarguments.length;r=K(r,u,4);var o=-1,a=n.length;if(typeof a=="number")for(i&&(e=n[++o]);++oarguments.length; +if(typeof u!="number")var o=Pt(n),u=o.length;return t=K(t,e,4),B(n,function(e,a,f){a=o?o[--u]:--u,r=i?(i=tt,n[a]):t(r,n[a],a,f)}),r}function W(n,r,e){var u;r=K(r,e,3),e=-1;var i=n?n.length:0;if(typeof i=="number")for(;++er(u,o)&&i.push(o)}return i}function P(n,t,r){if(n){var e=0,u=n.length; +if(typeof t!="number"&&t!=nt){var i=-1;for(t=K(t,r,3);++ir?qt(0,e+r):r||0}else if(r)return r=G(n,t),n[r]===t?r:-1;return n?u(n,t,r):-1}function V(n,t,r){if(typeof t!="number"&&t!=nt){var e=0,u=-1,i=n?n.length:0;for(t=K(t,r,3);++u>>1,r(n[e])c&&(a=n.apply(f,o));else{var r=new Date;!s&&!h&&(l=r);var e=p-(r-l);0/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Nt||(g=function(n){if(O(n)){a.prototype=n;var t=new a;a.prototype=nt}return t||{}}),_(arguments)||(_=function(n){return n&&typeof n=="object"?Ot.call(n,"callee"):tt});var Ct=Rt||function(n){return n&&typeof n=="object"?Tt.call(n)==ft:tt},Pt=Dt?function(n){return O(n)?Dt(n):[] +}:e,Ut={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},Vt=w(Ut),Gt=RegExp("("+Pt(Vt).join("|")+")","g"),Ht=RegExp("["+Pt(Ut).join("")+"]","g");A(/x/)&&(A=function(n){return typeof n=="function"&&"[object Function]"==Tt.call(n)}),f.after=function(n,t){return function(){return 1>--n?t.apply(this,arguments):void 0}},f.bind=J,f.bindAll=function(n){for(var t=1u(o,a)){for(var f=r;--f;)if(0>u(t[f],a))continue n; +o.push(a)}}return o},f.invert=w,f.invoke=function(n,t){var r=It.call(arguments,2),e=-1,u=typeof t=="function",i=n?n.length:0,o=Array(typeof i=="number"?i:0);return B(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},f.keys=Pt,f.map=D,f.max=q,f.memoize=function(n,t){var r={};return function(){var e=ut+(t?t.apply(this,arguments):arguments[0]);return Ot.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},f.min=function(n,t,r){var e=1/0,u=e,i=-1,o=n?n.length:0;if(t||typeof o!="number")t=K(t,r,3),B(n,function(n,r,i){r=t(n,r,i),rt(e,r)&&(u[r]=n)}),u},f.once=function(n){var t,r;return function(){return t?r:(t=Z,r=n.apply(this,arguments),n=nt,r)}},f.pairs=function(n){for(var t=-1,r=Pt(n),e=r.length,u=Array(e);++tt?0:t);++nr?qt(0,e+r):Mt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},f.mixin=X,f.noConflict=function(){return n._=jt,this},f.random=function(n,t){n==nt&&t==nt&&(t=1),n=+n||0,t==nt?(t=n,n=0):t=+t||0;var r=$t();return n%1||t%1?n+Mt(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+Ot(r*(t-n+1)) +},f.wrap=function(n,t){return function(){var r=[n];return Et.apply(r,arguments),t.apply(this,r)}},f.zip=function(){for(var n=-1,t=q(M(arguments,"length")),r=Array(0>t?0:t);++nr?qt(0,e+r):Mt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},f.mixin=X,f.noConflict=function(){return n._=jt,this},f.random=function(n,t){n==nt&&t==nt&&(t=1),n=+n||0,t==nt?(t=n,n=0):t=+t||0;var r=$t();return n%1||t%1?n+Mt(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+At(r*(t-n+1)) },f.reduce=$,f.reduceRight=I,f.result=function(n,t){var r=n?n[t]:Y;return A(r)?n[t]():r},f.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Pt(n).length},f.some=W,f.sortedIndex=G,f.template=function(n,t,r){var e=f.templateSettings;n||(n=""),r=b({},r,e);var u=0,i="__p+='",e=r.variable;n.replace(RegExp((r.escape||it).source+"|"+(r.interpolate||it).source+"|"+(r.evaluate||it).source+"|$","g"),function(t,r,e,a,f){return i+=n.slice(u,f).replace(ot,o),r&&(i+="'+_['escape']("+r+")+'"),a&&(i+="';"+a+";__p+='"),e&&(i+="'+((__t=("+e+"))==null?'':__t)+'"),u=f+t.length,t }),i+="';\n",e||(e="obj",i="with("+e+"||{}){"+i+"}"),i="function("+e+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+i+"return __p}";try{var a=Function("_","return "+i)(f)}catch(c){throw c.source=i,c}return t?a(t):(a.source=i,a)},f.unescape=function(n){return n==nt?"":(n+"").replace(Gt,m)},f.uniqueId=function(n){var t=++rt+"";return n?n+t:t},f.all=N,f.any=W,f.detect=k,f.findWhere=function(n,t){return z(n,t,Z)},f.foldl=$,f.foldr=I,f.include=F,f.inject=$,f.first=P,f.last=function(n,t,r){if(n){var e=0,u=n.length; -if(typeof t!="number"&&t!=nt){var i=u;for(t=K(t,r);i--&&t(n[i],i,n);)e++}else if(e=t,e==nt||r)return n[u-1];return It.call(n,qt(0,u-e))}},f.take=P,f.head=P,f.VERSION="1.3.1",X(f),f.prototype.chain=function(){return this.__chain__=Z,this},f.prototype.value=function(){return this.__wrapped__},B("pop push reverse shift sort splice unshift".split(" "),function(n){var t=bt[n];f.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!zt.spliceObjects&&0===n.length&&delete n[0],this} -}),B(["concat","join","slice"],function(n){var t=bt[n];f.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new c(n),n.__chain__=Z),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=f, define(function(){return f})):mt&&!mt.nodeType?_t?(_t.exports=f)._=f:mt._=f:n._=f}(this); \ No newline at end of file +if(typeof t!="number"&&t!=nt){var i=u;for(t=K(t,r,3);i--&&t(n[i],i,n);)e++}else if(e=t,e==nt||r)return n[u-1];return It.call(n,qt(0,u-e))}},f.take=P,f.head=P,f.VERSION="1.3.1",X(f),f.prototype.chain=function(){return this.__chain__=Z,this},f.prototype.value=function(){return this.__wrapped__},B("pop push reverse shift sort splice unshift".split(" "),function(n){var t=bt[n];f.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!zt.spliceObjects&&0===n.length&&delete n[0],this +}}),B(["concat","join","slice"],function(n){var t=bt[n];f.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new c(n),n.__chain__=Z),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=f, define(function(){return f})):mt&&!mt.nodeType?_t?(_t.exports=f)._=f:mt._=f:n._=f}(this); \ No newline at end of file diff --git a/lodash.js b/lodash.js index be48aaa5c..90f8e7963 100644 --- a/lodash.js +++ b/lodash.js @@ -485,7 +485,6 @@ /** Native method shortcuts */ var ceil = Math.ceil, clearTimeout = context.clearTimeout, - concat = arrayRef.concat, defineProperty = reNative.test(defineProperty = Object.defineProperty) && defineProperty, floor = Math.floor, fnToString = Function.prototype.toString, @@ -495,7 +494,8 @@ propertyIsEnumerable = objectProto.propertyIsEnumerable, setImmediate = context.setImmediate, setTimeout = context.setTimeout, - toString = objectProto.toString; + toString = objectProto.toString, + unshift = arrayRef.unshift; /* Native method shortcuts for methods with the same name as other `lodash` methods */ var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind, @@ -954,7 +954,7 @@ /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ var eachIteratorOptions = { 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg)", + 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg, 3)", 'array': "typeof length == 'number'", 'loop': 'if (callback(iterable[index], index, collection) === false) return result' }; @@ -1393,9 +1393,7 @@ if (!isFunc && !isBindKey) { throw new TypeError; } - var args = func.__bindData__, - key = thisArg; - + var args = func.__bindData__; if (args) { push.apply(args[2], partialArgs); push.apply(args[3], partialRightArgs); @@ -1408,17 +1406,12 @@ } return createBound.apply(null, args); } - // take a snapshot of `arguments` before juggling - args = nativeSlice.call(arguments); - - // juggle arguments for `_.bindKey` behavior - if (isBindKey) { - thisArg = func; - } // use `Function#bind` if it exists and is fast // (in V8 `Function#bind` is slower except when partially applied) if (!isPartial && !isAlt && !partialRightArgs.length && (support.fastBind || (nativeBind && partialArgs.length))) { - var bound = nativeBind.call.apply(nativeBind, concat.call(arrayRef, func, thisArg, partialArgs)); + args = [func, thisArg]; + push.apply(args, partialArgs); + var bound = nativeBind.call.apply(nativeBind, args); } else { bound = function() { @@ -1431,7 +1424,7 @@ func = thisArg[key]; } if (partialArgs.length || partialRightArgs.length) { - args = concat.apply(partialArgs, args); + unshift.apply(args, partialArgs); push.apply(args, partialRightArgs); } if (this instanceof bound) { @@ -1446,6 +1439,12 @@ return func.apply(thisBinding, args); }; } + // take a snapshot of `arguments` before juggling + args = nativeSlice.call(arguments); + if (isBindKey) { + var key = thisArg; + thisArg = func; + } setBindData(bound, args); return bound; } @@ -1930,7 +1929,7 @@ */ function findKey(object, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forOwn(object, function(value, key, object) { if (callback(value, key, object)) { result = key; @@ -2552,7 +2551,7 @@ result = {}; if (isFunc) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } else { var props = baseFlatten(arguments, true, false, 1); } @@ -2634,7 +2633,7 @@ } } } else { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forIn(object, function(value, key, object) { if (callback(value, key, object)) { result[key] = value; @@ -2842,7 +2841,7 @@ */ function countBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -2894,7 +2893,7 @@ */ function every(collection, callback, thisArg) { var result = true; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -2955,7 +2954,7 @@ */ function filter(collection, callback, thisArg) { var result = []; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -3021,7 +3020,7 @@ * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' } */ function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -3119,7 +3118,7 @@ */ function groupBy(collection, callback, thisArg) { var result = {}; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { key = String(callback(value, key, collection)); @@ -3207,7 +3206,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { while (++index < length) { result[index] = callback(collection[index], index, collection); @@ -3276,7 +3275,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); baseEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -3345,7 +3344,7 @@ } else { callback = (!callback && isString(collection)) ? charAtCallback - : lodash.createCallback(callback, thisArg); + : lodash.createCallback(callback, thisArg, 3); baseEach(collection, function(value, index, collection) { var current = callback(value, index, collection); @@ -3514,7 +3513,7 @@ * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }] */ function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); return filter(collection, function(value, index, collection) { return !callback(value, index, collection); }); @@ -3616,7 +3615,7 @@ */ function some(collection, callback, thisArg) { var result; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); if (isArray(collection)) { var index = -1, @@ -3675,7 +3674,7 @@ length = collection ? collection.length : 0, result = Array(typeof length == 'number' ? length : 0); - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); forEach(collection, function(value, key, collection) { var object = result[++index] = getObject(); object.criteria = callback(value, key, collection); @@ -3841,7 +3840,7 @@ var index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length) { if (callback(array[index], index, array)) { return index; @@ -3914,7 +3913,7 @@ if (typeof callback != 'number' && callback != null) { var index = -1; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -4082,7 +4081,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -4215,7 +4214,7 @@ if (typeof callback != 'number' && callback != null) { var index = length; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (index-- && callback(array[index], index, array)) { n++; } @@ -4375,7 +4374,7 @@ index = -1, length = array ? array.length : 0; - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); while (++index < length && callback(array[index], index, array)) { n++; } @@ -4519,7 +4518,7 @@ isSorted = false; } if (callback != null) { - callback = lodash.createCallback(callback, thisArg); + callback = lodash.createCallback(callback, thisArg, 3); } return baseUniq(array, isSorted, callback); } @@ -4779,7 +4778,7 @@ * @category Functions * @param {Mixed} [func=identity] The value to convert to a callback. * @param {Mixed} [thisArg] The `this` binding of the created callback. - * @param {Number} [argCount=3] The number of arguments the callback accepts. + * @param {Number} [argCount] The number of arguments the callback accepts. * @returns {Function} Returns a callback function. * @example * @@ -4863,23 +4862,22 @@ // created by `_.partial` or `_.partialRight` return bindData[4] ? bind(func, thisArg) : func; } - if (argCount === 1) { - return function(value) { + switch (argCount) { + case 1: return function(value) { return func.call(thisArg, value); }; - } - if (argCount === 2) { - return function(a, b) { + case 2: return function(a, b) { return func.call(thisArg, a, b); }; - } - if (argCount === 4) { - return function(accumulator, value, index, collection) { + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { return func.call(thisArg, accumulator, value, index, collection); }; } - return function(value, index, collection) { - return func.call(thisArg, value, index, collection); + return function() { + return func.apply(thisArg, arguments); }; }