From 63052257a20d717a4f0d9e395f21846220b5098f Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Thu, 14 Mar 2013 14:38:48 -0700 Subject: [PATCH] Adjust large array size for `_.difference` and cleanup large array optimization code. Former-commit-id: c3623ce2e0639a9e98d77e36e4dae51063c76e92 --- build.js | 1 - dist/lodash.compat.js | 15 +++----- dist/lodash.compat.min.js | 78 +++++++++++++++++++-------------------- dist/lodash.js | 15 +++----- dist/lodash.min.js | 72 ++++++++++++++++++------------------ doc/parse.php | 2 +- lodash.js | 15 +++----- perf/perf.js | 6 +-- 8 files changed, 94 insertions(+), 110 deletions(-) diff --git a/build.js b/build.js index 20fe95bb6..3016a17ae 100755 --- a/build.js +++ b/build.js @@ -2363,7 +2363,6 @@ // remove large array optimizations source = removeFunction(source, 'cachedContains'); - source = removeVar(source, 'largeArraySize'); // remove `_.isEqual` use from `createCallback` source = source.replace(matchFunction(source, 'createCallback'), function(match) { diff --git a/dist/lodash.compat.js b/dist/lodash.compat.js index 91d93586b..2f11a7366 100644 --- a/dist/lodash.compat.js +++ b/dist/lodash.compat.js @@ -30,9 +30,6 @@ /** Used internally to indicate various things */ var indicatorObject = {}; - /** Used by `cachedContains` as the default size when optimizations are enabled for large arrays */ - var largeArraySize = 30; - /** Used to match empty string literals in compiled template source */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, @@ -575,15 +572,13 @@ * @private * @param {Array} array The array to search. * @param {Mixed} value The value to search for. - * @param {Number} [fromIndex=0] The index to search from. - * @param {Number} [largeSize=30] The length at which an array is considered large. + * @param {Number} fromIndex The index to search from. + * @param {Number} largeSize The length at which an array is considered large. * @returns {Boolean} Returns `true`, if `value` is found, else `false`. */ function cachedContains(array, fromIndex, largeSize) { - fromIndex || (fromIndex = 0); - var length = array.length, - isLarge = (length - fromIndex) >= (largeSize || largeArraySize); + isLarge = (length - fromIndex) >= largeSize; if (isLarge) { var cache = {}, @@ -3239,7 +3234,7 @@ var index = -1, length = array ? array.length : 0, flattened = concat.apply(arrayRef, arguments), - contains = cachedContains(flattened, length), + contains = cachedContains(flattened, length, 100), result = []; while (++index < length) { @@ -3989,7 +3984,7 @@ function without(array) { var index = -1, length = array ? array.length : 0, - contains = cachedContains(arguments, 1), + contains = cachedContains(arguments, 1, 30), result = []; while (++index < length) { diff --git a/dist/lodash.compat.min.js b/dist/lodash.compat.min.js index c4a342803..82e5b49e8 100644 --- a/dist/lodash.compat.min.js +++ b/dist/lodash.compat.min.js @@ -4,42 +4,42 @@ * Build: `lodash -o ./dist/lodash.compat.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(r){function a(n){return n&&typeof n=="object"&&!ge(n)&&Gt.call(n,"__wrapped__")?n:new M(n)}function F(n,t,e){t||(t=0);var r=n.length,u=r-t>=(e||f);if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(nu;u++)r+="i='"+t.f[u]+"';if(","constructor"==t.f[u]&&(r+="!(f&&f.prototype===m)&&"),r+="h.call(m,i)){"+t.e+"}"}return(t.b||le.nonEnumArgs)&&(r+="}"),r+=t.c+";return u",e("h,j,k,l,o,r,p","return function("+n+"){"+r+"}")(Gt,H,ge,rt,a,N,te)}function z(n){return"\\"+$[n]}function K(n){return ye[n]}function L(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function M(n){this.__wrapped__=n}function U(){}function V(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1; -e=e-t||0;for(var u=St(0>e?0:e);++re?ee(0,u+e):e)||0,typeof u=="number"?a=-1<(rt(n)?n.indexOf(t,e):dt(n,t,e)):pe(n,function(n){return++ru&&(u=i)}}else t=!t&&rt(n)?q:a.createCallback(t,e),pe(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u}function vt(n,t,e,r){var u=3>arguments.length;if(t=a.createCallback(t,r,4),ge(n)){var o=-1,i=n.length;for(u&&(e=n[++o]);++oarguments.length;if(typeof o!="number")var f=he(n),o=f.length; -else le.unindexedChars&&rt(n)&&(u=n.split(""));return t=a.createCallback(t,r,4),lt(n,function(n,r,a){r=f?f[--o]:--o,e=i?(i=!1,u[r]):t(e,u[r],r,a)}),e}function ht(n,t,e){var r;if(t=a.createCallback(t,e),ge(n)){e=-1;for(var u=n.length;++ee?ee(0,u+e):e||0)-1;else if(e)return r=_t(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])dt(f,p))&&((e||c)&&f.push(p),i.push(r))}return i -}function wt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:h,variable:"",imports:{_:a}};var At={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},me=Y(ye),de=D(At,{g:At.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),be=D(At); -nt(/x/)&&(nt=function(n){return n instanceof It||Wt.call(n)==O});var _e=Vt?function(n){if(!n||Wt.call(n)!=S||!le.argsClass&&H(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Vt(t))&&Vt(e);return e?n==e||Vt(n)==e:J(n)}:J;return fe&&u&&typeof Jt=="function"&&(kt=jt(Jt,r)),Jt=8==ue("08")?ue:function(n,t){return ue(rt(n)?n.replace(y,""):n,t||0)},a.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},a.assign=de,a.at=function(n){var t=-1,e=Mt.apply(Rt,V(arguments,1)),r=e.length,u=St(r); -for(le.unindexedChars&&rt(n)&&(n=n.split(""));++tdt(f,c)){o&&f.push(c); -for(var p=e;--p;)if(!(r[p]||(r[p]=F(t[p],0,100)))(c))continue n;i.push(c)}}return i},a.invert=Y,a.invoke=function(n,t){var e=V(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=St(typeof a=="number"?a:0);return lt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},a.keys=he,a.map=pt,a.max=st,a.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Gt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=ut,a.min=function(n,t,e){var r=1/0,u=r; -if(!t&&ge(n)){e=-1;for(var o=n.length;++edt(o,e,1))&&(u[e]=n)}),u},a.once=function(n){var t,e;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},a.pairs=function(n){for(var t=-1,e=he(n),r=e.length,u=St(r);++te?ee(0,r+e):re(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=Ot,a.noConflict=function(){return r._=Dt,this},a.parseInt=Jt,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Ut(ae()*((+t||0)-n+1)) -},a.reduce=vt,a.reduceRight=gt,a.result=function(n,t){var r=n?n[t]:e;return nt(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:he(n).length},a.some=ht,a.sortedIndex=_t,a.template=function(n,t,r){var u=a.templateSettings;n||(n=""),r=be({},r,u);var o,i=be({},r.imports,u.imports),u=he(i),i=at(i),f=0,s=r.interpolate||m,g="__p+='",s=Ft((r.escape||m).source+"|"+s.source+"|"+(s===h?v:m).source+"|"+(r.evaluate||m).source+"|$","g");n.replace(s,function(t,e,r,u,a,i){return r||(r=u),g+=n.slice(f,i).replace(b,z),e&&(g+="'+__e("+e+")+'"),a&&(o=!0,g+="';"+a+";__p+='"),r&&(g+="'+((__t=("+r+"))==null?'':__t)+'"),f=i+t.length,t -}),g+="';\n",s=r=r.variable,s||(r="obj",g="with("+r+"){"+g+"}"),g=(o?g.replace(c,""):g).replace(l,"$1").replace(p,"$1;"),g="function("+r+"){"+(s?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+g+"return __p}";try{var y=It(u,"return "+g).apply(e,i)}catch(d){throw d.source=g,d}return t?y(t):(y.source=g,y)},a.unescape=function(n){return null==n?"":(n+"").replace(s,G)},a.uniqueId=function(n){var t=++o;return(null==n?"":n+"")+t -},a.all=it,a.any=ht,a.detect=ct,a.foldl=vt,a.foldr=gt,a.include=ot,a.inject=vt,ve(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Ht.apply(t,arguments),n.apply(a,t)})}),a.first=yt,a.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[u-1];return V(n,ee(0,u-r))}},a.take=yt,a.head=yt,ve(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e); -return null==t||e&&typeof t!="function"?r:new M(r)})}),a.VERSION="1.0.1",a.prototype.toString=function(){return this.__wrapped__+""},a.prototype.value=Et,a.prototype.valueOf=Et,pe(["join","pop","shift"],function(n){var t=Rt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),pe(["push","reverse","sort","unshift"],function(n){var t=Rt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),pe(["concat","slice","splice"],function(n){var t=Rt[n];a.prototype[n]=function(){return new M(t.apply(this.__wrapped__,arguments)) -}}),le.spliceObjects||pe(["pop","shift","splice"],function(n){var t=Rt[n],e="splice"==n;a.prototype[n]=function(){var n=this.__wrapped__,r=t.apply(n,arguments);return 0===n.length&&delete n[0],e?new M(r):r}}),a}var e,r=typeof exports=="object"&&exports,u=typeof module=="object"&&module&&module.exports==r&&module,a=typeof global=="object"&&global;a.global===a&&(n=a);var o=0,i={},f=30,c=/\b__p\+='';/g,l=/\b(__p\+=)''\+/g,p=/(__e\(.*?\)|\b__t\))\+'';/g,s=/&(?:amp|lt|gt|quot|#39);/g,v=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,g=/\w*$/,h=/<%=([\s\S]+?)%>/g,y=/^0+(?=.$)/,m=/($^)/,d=/[&<>"']/g,b=/['\n\r\t\u2028\u2029\\]/g,_="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),C="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),w="[object Arguments]",j="[object Array]",k="[object Boolean]",x="[object Date]",O="[object Function]",E="[object Number]",S="[object Object]",A="[object RegExp]",P="[object String]",I={}; -I[O]=!1,I[w]=I[j]=I[k]=I[x]=I[E]=I[S]=I[A]=I[P]=!0;var N={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},$={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=B,define(function(){return B})):r&&!r.nodeType?u?(u.exports=B)._=B:r._=B:n._=B})(this); \ No newline at end of file +;(function(n){function t(r){function a(n){return n&&typeof n=="object"&&!ve(n)&&Vt.call(n,"__wrapped__")?n:new L(n)}function B(n,t,e){var r=n.length,u=r-t>=e;if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(nu;u++)r+="i='"+t.f[u]+"';if(","constructor"==t.f[u]&&(r+="!(f&&f.prototype===m)&&"),r+="h.call(m,i)){"+t.e+"}"}return(t.b||ce.nonEnumArgs)&&(r+="}"),r+=t.c+";return u",e("h,j,k,l,o,r,p","return function("+n+"){"+r+"}")(Vt,G,ve,et,a,I,ne)}function D(n){return"\\"+N[n]}function z(n){return he[n]}function K(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function L(n){this.__wrapped__=n}function M(){}function U(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1; +e=e-t||0;for(var u=Et(0>e?0:e);++re?te(0,u+e):e)||0,typeof u=="number"?a=-1<(et(n)?n.indexOf(t,e):mt(n,t,e)):le(n,function(n){return++ru&&(u=i)}}else t=!t&&et(n)?F:a.createCallback(t,e),le(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u}function st(n,t,e,r){var u=3>arguments.length;if(t=a.createCallback(t,r,4),ve(n)){var o=-1,i=n.length;for(u&&(e=n[++o]);++oarguments.length;if(typeof o!="number")var f=ge(n),o=f.length; +else ce.unindexedChars&&et(n)&&(u=n.split(""));return t=a.createCallback(t,r,4),ct(n,function(n,r,a){r=f?f[--o]:--o,e=i?(i=!1,u[r]):t(e,u[r],r,a)}),e}function gt(n,t,e){var r;if(t=a.createCallback(t,e),ve(n)){e=-1;for(var u=n.length;++ee?te(0,u+e):e||0)-1;else if(e)return r=bt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])mt(f,p))&&((e||c)&&f.push(p),i.push(r))}return i +}function Ct(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:g,variable:"",imports:{_:a}};var St={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ye=X(he),me=T(St,{g:St.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),de=T(St); +Z(/x/)&&(Z=function(n){return n instanceof Pt||Qt.call(n)==x});var be=Ut?function(n){if(!n||Qt.call(n)!=E||!ce.argsClass&&G(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Ut(t))&&Ut(e);return e?n==e||Ut(n)==e:H(n)}:H;return ie&&u&&typeof Ht=="function"&&(jt=wt(Ht,r)),Ht=8==re("08")?re:function(n,t){return re(et(n)?n.replace(h,""):n,t||0)},a.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},a.assign=me,a.at=function(n){var t=-1,e=Lt.apply(qt,U(arguments,1)),r=e.length,u=Et(r); +for(ce.unindexedChars&&et(n)&&(n=n.split(""));++tmt(f,c)){o&&f.push(c); +for(var p=e;--p;)if(!(r[p]||(r[p]=B(t[p],0,100)))(c))continue n;i.push(c)}}return i},a.invert=X,a.invoke=function(n,t){var e=U(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Et(typeof a=="number"?a:0);return ct(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},a.keys=ge,a.map=lt,a.max=pt,a.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Vt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=rt,a.min=function(n,t,e){var r=1/0,u=r; +if(!t&&ve(n)){e=-1;for(var o=n.length;++emt(o,e,1))&&(u[e]=n)}),u},a.once=function(n){var t,e;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},a.pairs=function(n){for(var t=-1,e=ge(n),r=e.length,u=Et(r);++te?te(0,r+e):ee(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=xt,a.noConflict=function(){return r._=Tt,this},a.parseInt=Ht,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Mt(ue()*((+t||0)-n+1)) +},a.reduce=st,a.reduceRight=vt,a.result=function(n,t){var r=n?n[t]:e;return Z(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ge(n).length},a.some=gt,a.sortedIndex=bt,a.template=function(n,t,r){var u=a.templateSettings;n||(n=""),r=de({},r,u);var o,i=de({},r.imports,u.imports),u=ge(i),i=ut(i),p=0,v=r.interpolate||y,h="__p+='",v=Bt((r.escape||y).source+"|"+v.source+"|"+(v===g?s:y).source+"|"+(r.evaluate||y).source+"|$","g");n.replace(v,function(t,e,r,u,a,i){return r||(r=u),h+=n.slice(p,i).replace(d,D),e&&(h+="'+__e("+e+")+'"),a&&(o=!0,h+="';"+a+";__p+='"),r&&(h+="'+((__t=("+r+"))==null?'':__t)+'"),p=i+t.length,t +}),h+="';\n",v=r=r.variable,v||(r="obj",h="with("+r+"){"+h+"}"),h=(o?h.replace(f,""):h).replace(c,"$1").replace(l,"$1;"),h="function("+r+"){"+(v?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+h+"return __p}";try{var m=Pt(u,"return "+h).apply(e,i)}catch(b){throw b.source=h,b}return t?m(t):(m.source=h,m)},a.unescape=function(n){return null==n?"":(n+"").replace(p,V)},a.uniqueId=function(n){var t=++o;return(null==n?"":n+"")+t +},a.all=ot,a.any=gt,a.detect=ft,a.foldl=st,a.foldr=vt,a.include=at,a.inject=st,se(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Gt.apply(t,arguments),n.apply(a,t)})}),a.first=ht,a.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[u-1];return U(n,te(0,u-r))}},a.take=ht,a.head=ht,se(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e); +return null==t||e&&typeof t!="function"?r:new L(r)})}),a.VERSION="1.0.1",a.prototype.toString=function(){return this.__wrapped__+""},a.prototype.value=Ot,a.prototype.valueOf=Ot,le(["join","pop","shift"],function(n){var t=qt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),le(["push","reverse","sort","unshift"],function(n){var t=qt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),le(["concat","slice","splice"],function(n){var t=qt[n];a.prototype[n]=function(){return new L(t.apply(this.__wrapped__,arguments)) +}}),ce.spliceObjects||le(["pop","shift","splice"],function(n){var t=qt[n],e="splice"==n;a.prototype[n]=function(){var n=this.__wrapped__,r=t.apply(n,arguments);return 0===n.length&&delete n[0],e?new L(r):r}}),a}var e,r=typeof exports=="object"&&exports,u=typeof module=="object"&&module&&module.exports==r&&module,a=typeof global=="object"&&global;a.global===a&&(n=a);var o=0,i={},f=/\b__p\+='';/g,c=/\b(__p\+=)''\+/g,l=/(__e\(.*?\)|\b__t\))\+'';/g,p=/&(?:amp|lt|gt|quot|#39);/g,s=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,v=/\w*$/,g=/<%=([\s\S]+?)%>/g,h=/^0+(?=.$)/,y=/($^)/,m=/[&<>"']/g,d=/['\n\r\t\u2028\u2029\\]/g,b="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),C="[object Arguments]",w="[object Array]",j="[object Boolean]",k="[object Date]",x="[object Function]",O="[object Number]",E="[object Object]",S="[object RegExp]",A="[object String]",P={}; +P[x]=!1,P[C]=P[w]=P[j]=P[k]=P[O]=P[E]=P[S]=P[A]=!0;var I={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},N={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},$=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=$,define(function(){return $})):r&&!r.nodeType?u?(u.exports=$)._=$:r._=$:n._=$})(this); \ No newline at end of file diff --git a/dist/lodash.js b/dist/lodash.js index da1806f92..9b796f0d4 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -30,9 +30,6 @@ /** Used internally to indicate various things */ var indicatorObject = {}; - /** Used by `cachedContains` as the default size when optimizations are enabled for large arrays */ - var largeArraySize = 30; - /** Used to match empty string literals in compiled template source */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, @@ -424,15 +421,13 @@ * @private * @param {Array} array The array to search. * @param {Mixed} value The value to search for. - * @param {Number} [fromIndex=0] The index to search from. - * @param {Number} [largeSize=30] The length at which an array is considered large. + * @param {Number} fromIndex The index to search from. + * @param {Number} largeSize The length at which an array is considered large. * @returns {Boolean} Returns `true`, if `value` is found, else `false`. */ function cachedContains(array, fromIndex, largeSize) { - fromIndex || (fromIndex = 0); - var length = array.length, - isLarge = (length - fromIndex) >= (largeSize || largeArraySize); + isLarge = (length - fromIndex) >= largeSize; if (isLarge) { var cache = {}, @@ -3039,7 +3034,7 @@ var index = -1, length = array ? array.length : 0, flattened = concat.apply(arrayRef, arguments), - contains = cachedContains(flattened, length), + contains = cachedContains(flattened, length, 100), result = []; while (++index < length) { @@ -3789,7 +3784,7 @@ function without(array) { var index = -1, length = array ? array.length : 0, - contains = cachedContains(arguments, 1), + contains = cachedContains(arguments, 1, 30), result = []; while (++index < length) { diff --git a/dist/lodash.min.js b/dist/lodash.min.js index 2a63b5d3b..bd9bb013c 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -4,39 +4,39 @@ * Build: `lodash modern -o ./dist/lodash.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(o){function f(n){if(!n||Yt.call(n)!=A)return a;var t=n.valueOf,e=typeof t=="function"&&(e=Jt(t))&&Jt(e);return e?n==e||Jt(n)==e:Q(n)}function R(n){return n&&typeof n=="object"&&!se(n)&&Lt.call(n,"__wrapped__")?n:new V(n)}function T(n,t,e){t||(t=0);var r=n.length,u=r-t>=(e||p);if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(ne?0:e);++re?ue(0,u+e):e)||0,typeof u=="number"?o=-1<(ut(n)?n.indexOf(t,e):dt(n,t,e)):pe(n,function(n){return++ru&&(u=o)}}else t=!t&&ut(n)?D:R.createCallback(t,e),pt(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u -}function gt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=R.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=ve(n),u=i.length;return t=R.createCallback(t,r,4),pt(n,function(r,f,c){f=i?i[--u]:--u,e=o?(o=a,n[f]):t(e,n[f],f,c)}),e}function yt(n,t,e){var r;t=R.createCallback(t,e),e=-1;var u=n?n.length:0; -if(typeof u=="number")for(;++ee?ue(0,u+e):e||0)-1;else if(e)return r=kt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])dt(c,s))&&((e||l)&&c.push(s),f.push(r))}return f}function jt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:b,variable:"",imports:{_:R}},It={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},he=Z(ge),ye=P(It,{g:It.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),me=P(It);return Ft&&i&&typeof Wt=="function"&&(Ot=Ct(Wt,o)),Wt=8==oe("08")?oe:function(n,t){return oe(ut(n)?n.replace(d,""):n,t||0) -},R.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},R.assign=ye,R.at=function(n){for(var t=-1,e=Gt.apply(zt,H(arguments,1)),r=e.length,u=Et(r);++tdt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=T(t[p],0,100)))(c))continue n;i.push(c)}}return i},R.invert=Z,R.invoke=function(n,t){var e=H(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Et(typeof a=="number"?a:0);return pt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) -}),o},R.keys=ve,R.map=st,R.max=vt,R.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Lt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},R.merge=at,R.min=function(n,t,e){var r=1/0,u=r;if(!t&&se(n)){e=-1;for(var a=n.length;++edt(a,e,1))&&(u[e]=n)}),u},R.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},R.pairs=function(n){for(var t=-1,e=ve(n),r=e.length,u=Et(r);++te?ue(0,r+e):ae(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},R.mixin=St,R.noConflict=function(){return o._=Pt,this -},R.parseInt=Wt,R.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+Ht(ie()*((+t||0)-n+1))},R.reduce=gt,R.reduceRight=ht,R.result=function(n,t){var r=n?n[t]:e;return tt(r)?n[t]():r},R.runInContext=t,R.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ve(n).length},R.some=yt,R.sortedIndex=kt,R.template=function(n,t,u){var a=R.templateSettings;n||(n=""),u=me({},u,a);var o,i=me({},u.imports,a.imports),a=ve(i),i=ot(i),f=0,c=u.interpolate||_,l="__p+='",c=Tt((u.escape||_).source+"|"+c.source+"|"+(c===b?y:_).source+"|"+(u.evaluate||_).source+"|$","g"); -n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(w,M),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t}),l+="';\n",c=u=u.variable,c||(u="obj",l="with("+u+"){"+l+"}"),l=(o?l.replace(s,""):l).replace(v,"$1").replace(g,"$1;"),l="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var p=Bt(a,"return "+l).apply(e,i) -}catch(h){throw h.source=l,h}return t?p(t):(p.source=l,p)},R.unescape=function(n){return n==u?"":(n+"").replace(h,J)},R.uniqueId=function(n){var t=++c;return(n==u?"":n+"")+t},R.all=ft,R.any=yt,R.detect=lt,R.foldl=gt,R.foldr=ht,R.include=it,R.inject=gt,pe(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(){var t=[this.__wrapped__];return Qt.apply(t,arguments),n.apply(R,t)})}),R.first=mt,R.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=R.createCallback(t,e);o--&&t(n[o],o,n);)r++ -}else if(r=t,r==u||e)return n[a-1];return H(n,ue(0,a-r))}},R.take=mt,R.head=mt,pe(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return t==u||e&&typeof t!="function"?r:new V(r)})}),R.VERSION="1.0.1",R.prototype.toString=function(){return this.__wrapped__+""},R.prototype.value=At,R.prototype.valueOf=At,pt(["join","pop","shift"],function(n){var t=zt[n];R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),pt(["push","reverse","sort","unshift"],function(n){var t=zt[n]; -R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),pt(["concat","slice","splice"],function(n){var t=zt[n];R.prototype[n]=function(){return new V(t.apply(this.__wrapped__,arguments))}}),R}var e,r=!0,u=null,a=!1,o=typeof exports=="object"&&exports,i=typeof module=="object"&&module&&module.exports==o&&module,f=typeof global=="object"&&global;f.global===f&&(n=f);var c=0,l={},p=30,s=/\b__p\+='';/g,v=/\b(__p\+=)''\+/g,g=/(__e\(.*?\)|\b__t\))\+'';/g,h=/&(?:amp|lt|gt|quot|#39);/g,y=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,m=/\w*$/,b=/<%=([\s\S]+?)%>/g,d=/^0+(?=.$)/,_=/($^)/,k=/[&<>"']/g,w=/['\n\r\t\u2028\u2029\\]/g,j="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),C="[object Arguments]",x="[object Array]",O="[object Boolean]",N="[object Date]",S="[object Number]",A="[object Object]",E="[object RegExp]",I="[object String]",$={"[object Function]":a}; -$[C]=$[x]=$[O]=$[N]=$[S]=$[A]=$[E]=$[I]=r;var B={"boolean":a,"function":r,object:r,number:a,string:a,undefined:a},F={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},q=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=q,define(function(){return q})):o&&!o.nodeType?i?(i.exports=q)._=q:o._=q:n._=q})(this); \ No newline at end of file +;(function(n){function t(o){function f(n){if(!n||Xt.call(n)!=S)return a;var t=n.valueOf,e=typeof t=="function"&&(e=Ht(t))&&Ht(e);return e?n==e||Ht(n)==e:L(n)}function q(n){return n&&typeof n=="object"&&!pe(n)&&Jt.call(n,"__wrapped__")?n:new U(n)}function R(n,t,e){var r=n.length,u=r-t>=e;if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(ne?0:e);++re?re(0,u+e):e)||0,typeof u=="number"?o=-1<(rt(n)?n.indexOf(t,e):bt(n,t,e)):le(n,function(n){return++ru&&(u=o)}}else t=!t&&rt(n)?T:q.createCallback(t,e),lt(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u +}function vt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=q.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=se(n),u=i.length;return t=q.createCallback(t,r,4),lt(n,function(r,f,c){f=i?i[--u]:--u,e=o?(o=a,n[f]):t(e,n[f],f,c)}),e}function ht(n,t,e){var r;t=q.createCallback(t,e),e=-1;var u=n?n.length:0; +if(typeof u=="number")for(;++ee?re(0,u+e):e||0)-1;else if(e)return r=_t(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])bt(c,s))&&((e||l)&&c.push(s),f.push(r))}return f}function wt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:m,variable:"",imports:{_:q}},Et={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ge=Y(ve),he=K(Et,{g:Et.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),ye=K(Et);return Bt&&i&&typeof Qt=="function"&&(xt=jt(Qt,o)),Qt=8==ae("08")?ae:function(n,t){return ae(rt(n)?n.replace(b,""):n,t||0) +},q.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},q.assign=he,q.at=function(n){for(var t=-1,e=Vt.apply(Dt,G(arguments,1)),r=e.length,u=At(r);++tbt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=R(t[p],0,100)))(c))continue n;i.push(c)}}return i},q.invert=Y,q.invoke=function(n,t){var e=G(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=At(typeof a=="number"?a:0);return lt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) +}),o},q.keys=se,q.map=pt,q.max=st,q.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Jt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},q.merge=ut,q.min=function(n,t,e){var r=1/0,u=r;if(!t&&pe(n)){e=-1;for(var a=n.length;++ebt(a,e,1))&&(u[e]=n)}),u},q.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},q.pairs=function(n){for(var t=-1,e=se(n),r=e.length,u=At(r);++te?re(0,r+e):ue(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},q.mixin=Nt,q.noConflict=function(){return o._=Kt,this +},q.parseInt=Qt,q.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+Gt(oe()*((+t||0)-n+1))},q.reduce=vt,q.reduceRight=gt,q.result=function(n,t){var r=n?n[t]:e;return nt(r)?n[t]():r},q.runInContext=t,q.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:se(n).length},q.some=ht,q.sortedIndex=_t,q.template=function(n,t,u){var a=q.templateSettings;n||(n=""),u=ye({},u,a);var o,i=ye({},u.imports,a.imports),a=se(i),i=at(i),f=0,c=u.interpolate||d,l="__p+='",c=Rt((u.escape||d).source+"|"+c.source+"|"+(c===m?h:d).source+"|"+(u.evaluate||d).source+"|$","g"); +n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(k,P),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t}),l+="';\n",c=u=u.variable,c||(u="obj",l="with("+u+"){"+l+"}"),l=(o?l.replace(p,""):l).replace(s,"$1").replace(v,"$1;"),l="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var g=$t(a,"return "+l).apply(e,i) +}catch(y){throw y.source=l,y}return t?g(t):(g.source=l,g)},q.unescape=function(n){return n==u?"":(n+"").replace(g,H)},q.uniqueId=function(n){var t=++c;return(n==u?"":n+"")+t},q.all=it,q.any=ht,q.detect=ct,q.foldl=vt,q.foldr=gt,q.include=ot,q.inject=vt,le(q,function(n,t){q.prototype[t]||(q.prototype[t]=function(){var t=[this.__wrapped__];return Lt.apply(t,arguments),n.apply(q,t)})}),q.first=yt,q.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=q.createCallback(t,e);o--&&t(n[o],o,n);)r++ +}else if(r=t,r==u||e)return n[a-1];return G(n,re(0,a-r))}},q.take=yt,q.head=yt,le(q,function(n,t){q.prototype[t]||(q.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return t==u||e&&typeof t!="function"?r:new U(r)})}),q.VERSION="1.0.1",q.prototype.toString=function(){return this.__wrapped__+""},q.prototype.value=St,q.prototype.valueOf=St,lt(["join","pop","shift"],function(n){var t=Dt[n];q.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),lt(["push","reverse","sort","unshift"],function(n){var t=Dt[n]; +q.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),lt(["concat","slice","splice"],function(n){var t=Dt[n];q.prototype[n]=function(){return new U(t.apply(this.__wrapped__,arguments))}}),q}var e,r=!0,u=null,a=!1,o=typeof exports=="object"&&exports,i=typeof module=="object"&&module&&module.exports==o&&module,f=typeof global=="object"&&global;f.global===f&&(n=f);var c=0,l={},p=/\b__p\+='';/g,s=/\b(__p\+=)''\+/g,v=/(__e\(.*?\)|\b__t\))\+'';/g,g=/&(?:amp|lt|gt|quot|#39);/g,h=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,y=/\w*$/,m=/<%=([\s\S]+?)%>/g,b=/^0+(?=.$)/,d=/($^)/,_=/[&<>"']/g,k=/['\n\r\t\u2028\u2029\\]/g,w="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),j="[object Arguments]",C="[object Array]",x="[object Boolean]",O="[object Date]",N="[object Number]",S="[object Object]",A="[object RegExp]",E="[object String]",I={"[object Function]":a}; +I[j]=I[C]=I[x]=I[O]=I[N]=I[S]=I[A]=I[E]=r;var $={"boolean":a,"function":r,object:r,number:a,string:a,undefined:a},B={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},F=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=F,define(function(){return F})):o&&!o.nodeType?i?(i.exports=F)._=F:o._=F:n._=F})(this); \ No newline at end of file diff --git a/doc/parse.php b/doc/parse.php index 978138945..e80d37ebb 100644 --- a/doc/parse.php +++ b/doc/parse.php @@ -21,7 +21,7 @@ // generate Markdown $markdown = docdown(array( 'path' => '../' . $file, - 'title' => 'Lo-Dash v1.0.1', + 'title' => 'Lo-Dash v1.1.0', 'toc' => 'categories', 'url' => 'https://github.com/bestiejs/lodash/blob/master/lodash.js' )); diff --git a/lodash.js b/lodash.js index ff86099a4..d6dee4117 100644 --- a/lodash.js +++ b/lodash.js @@ -29,9 +29,6 @@ /** Used internally to indicate various things */ var indicatorObject = {}; - /** Used by `cachedContains` as the default size when optimizations are enabled for large arrays */ - var largeArraySize = 30; - /** Used to match empty string literals in compiled template source */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, @@ -584,15 +581,13 @@ * @private * @param {Array} array The array to search. * @param {Mixed} value The value to search for. - * @param {Number} [fromIndex=0] The index to search from. - * @param {Number} [largeSize=30] The length at which an array is considered large. + * @param {Number} fromIndex The index to search from. + * @param {Number} largeSize The length at which an array is considered large. * @returns {Boolean} Returns `true`, if `value` is found, else `false`. */ function cachedContains(array, fromIndex, largeSize) { - fromIndex || (fromIndex = 0); - var length = array.length, - isLarge = (length - fromIndex) >= (largeSize || largeArraySize); + isLarge = (length - fromIndex) >= largeSize; if (isLarge) { var cache = {}, @@ -3250,7 +3245,7 @@ var index = -1, length = array ? array.length : 0, flattened = concat.apply(arrayRef, arguments), - contains = cachedContains(flattened, length), + contains = cachedContains(flattened, length, 100), result = []; while (++index < length) { @@ -4000,7 +3995,7 @@ function without(array) { var index = -1, length = array ? array.length : 0, - contains = cachedContains(arguments, 1), + contains = cachedContains(arguments, 1, 30), result = []; while (++index < length) { diff --git a/perf/perf.js b/perf/perf.js index d96b33542..42d72b549 100644 --- a/perf/perf.js +++ b/perf/perf.js @@ -734,13 +734,13 @@ ); suites.push( - Benchmark.Suite('`_.difference` iterating 30 elements') + Benchmark.Suite('`_.difference` iterating 100 elements') .add(buildName, { - 'fn': 'lodash.difference(thirtyValues, thirtyValues2)', + 'fn': 'lodash.difference(hundredValues, hundredValues2)', 'teardown': 'function multiArrays(){}' }) .add(otherName, { - 'fn': '_.difference(thirtyValues, thirtyValues2)', + 'fn': '_.difference(hundredValues, hundredValues2)', 'teardown': 'function multiArrays(){}' }) );