From fef5e1ce2cea363b69c12c828b9143a85ba58be5 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 12 Mar 2013 07:32:02 -0700 Subject: [PATCH] Simplify "Collections" methods for the `modern` and `underscore` builds. Former-commit-id: 4ee5052537f7aed6816a886bee6da4e75c17099c --- build.js | 63 +++++++++++++++++++++++++++++- dist/lodash.js | 40 ++++++++++--------- dist/lodash.min.js | 72 +++++++++++++++++------------------ dist/lodash.underscore.js | 53 ++++++++++++-------------- dist/lodash.underscore.min.js | 48 +++++++++++------------ 5 files changed, 166 insertions(+), 110 deletions(-) diff --git a/build.js b/build.js index 1630c7e80..023b67b72 100755 --- a/build.js +++ b/build.js @@ -1720,14 +1720,19 @@ dependencyMap.isPlainObject = _.without(dependencyMap.isPlainObject, 'isArguments'); dependencyMap.keys = _.without(dependencyMap.keys, 'isArguments'); dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); + + if (!isMobile) { + dependencyMap.max.push('forEach'); + dependencyMap.min.push('forEach'); + } } if (isUnderscore) { dependencyMap.contains = _.without(dependencyMap.contains, 'isString'); dependencyMap.flatten = _.without(dependencyMap.flatten, 'createCallback'); dependencyMap.isEmpty = ['isArray', 'isString']; dependencyMap.isEqual = _.without(dependencyMap.isEqual, 'forIn', 'isArguments'); - dependencyMap.max = _.without(dependencyMap.max, 'isString'); - dependencyMap.min = _.without(dependencyMap.min, 'isString'); + dependencyMap.max = _.without(dependencyMap.max, 'isArray', 'isString'); + dependencyMap.min = _.without(dependencyMap.min, 'isArray', 'isString'); dependencyMap.pick = _.without(dependencyMap.pick, 'forIn', 'isObject'); dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); dependencyMap.template = _.without(dependencyMap.template, 'keys', 'values'); @@ -1744,6 +1749,14 @@ dependencyMap.forIn = _.without(dependencyMap.forIn, 'isArguments'); dependencyMap.forOwn = _.without(dependencyMap.forOwn, 'isArguments'); dependencyMap.toArray = _.without(dependencyMap.toArray, 'isString'); + + if (!isMobile) { + dependencyMap.every = _.without(dependencyMap.every, 'isArray'); + dependencyMap.filter = _.without(dependencyMap.filter, 'isArray'); + dependencyMap.forEach = _.without(dependencyMap.forEach, 'isArray'); + dependencyMap.map = _.without(dependencyMap.map, 'isArray'); + dependencyMap.reduce = _.without(dependencyMap.reduce, 'isArray'); + } } // add method names explicitly @@ -1812,6 +1825,52 @@ if (!isMobile) { source = removeSupportNonEnumArgs(source); + + // replace `_.map` + source = replaceFunction(source, 'map', [ + 'function map(collection, callback, thisArg) {', + ' var index = -1,', + ' length = collection ? collection.length : 0;', + '', + ' callback = createCallback(callback, thisArg);', + " if (typeof length == 'number') {", + ' var result = Array(length);', + ' while (++index < length) {', + ' result[index] = callback(collection[index], index, collection);', + ' }', + ' } else {', + ' result = [];', + ' each(collection, function(value, key, collection) {', + ' result[++index] = callback(value, key, collection);', + ' });', + ' }', + ' return result;', + '}' + ].join('\n')); + + // replace `isArray(collection)` checks in "Collections" methods with simpler type checks + _.each(['every', 'filter', 'forEach', 'max', 'min', 'reduce'], function(methodName) { + source = source.replace(matchFunction(source, methodName), function(match) { + if (methodName == 'reduce') { + match = match.replace(/^( *)var noaccum\b/m, '$1if (!collection) return accumulator;\n$&'); + } + else if (!isUnderscore && /^(?:max|min)$/.test(methodName)) { + return match.replace(/\beach\(/, 'forEach('); + } + return match.replace(/^(( *)if *\(.*?\bisArray\([^\)]+\).*?\) *{\n)(( *)var index[^;]+.+\n+)/m, function(snippet, statement, indent, vars) { + vars = vars + .replace(/\b(length *=)[^;]+/, '$1 collection' + (methodName == 'reduce' ? '.length' : ' ? collection.length : 0')) + .replace(RegExp('^ ' + indent, 'gm'), indent); + + return vars + statement.replace(/\bisArray\([^\)]+\)/, "typeof length == 'number'"); + }); + }); + }); + + // replace `arrays` property value of `eachIteratorOptions` with `false` + source = source.replace(/^( *)var eachIteratorOptions *= *[\s\S]+?\n\1};\n/m, function(match) { + return match.replace(/(^ *'arrays':)[^,]+/m, '$1 false'); + }); } } if (isModern) { diff --git a/dist/lodash.js b/dist/lodash.js index cafc994d5..ec3f98f22 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -405,7 +405,7 @@ var eachIteratorOptions = { 'args': 'collection, callback, thisArg', 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg)", - 'arrays': "typeof length == 'number'", + 'arrays': false, 'loop': 'if (callback(iterable[index], index, collection) === false) return result' }; @@ -2175,10 +2175,10 @@ var result = true; callback = lodash.createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { if (!(result = !!callback(collection[index], index, collection))) { break; @@ -2236,10 +2236,10 @@ var result = []; callback = lodash.createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { var value = collection[index]; if (callback(value, index, collection)) { @@ -2335,10 +2335,10 @@ * // => alerts each number value (order is not guaranteed) */ function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (callback && typeof thisArg == 'undefined' && typeof length == 'number') { while (++index < length) { if (callback(collection[index], index, collection) === false) { break; @@ -2471,15 +2471,16 @@ */ function map(collection, callback, thisArg) { var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); + length = collection ? collection.length : 0; - callback = lodash.createCallback(callback, thisArg); - if (isArray(collection)) { + callback = createCallback(callback, thisArg); + if (typeof length == 'number') { + var result = Array(length); while (++index < length) { result[index] = callback(collection[index], index, collection); } } else { + result = []; each(collection, function(value, key, collection) { result[++index] = callback(value, key, collection); }); @@ -2545,7 +2546,7 @@ ? charAtCallback : lodash.createCallback(callback, thisArg); - each(collection, function(value, index, collection) { + forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); if (current > computed) { computed = current; @@ -2614,7 +2615,7 @@ ? charAtCallback : lodash.createCallback(callback, thisArg); - each(collection, function(value, index, collection) { + forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); if (current < computed) { computed = current; @@ -2678,13 +2679,14 @@ * // => { 'a': 3, 'b': 6, 'c': 9 } */ function reduce(collection, callback, accumulator, thisArg) { + if (!collection) return accumulator; var noaccum = arguments.length < 3; callback = lodash.createCallback(callback, thisArg, 4); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection.length; + if (typeof length == 'number') { if (noaccum) { accumulator = collection[++index]; } diff --git a/dist/lodash.min.js b/dist/lodash.min.js index 6cb04a9cb..bb5c973e1 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(r){function a(n){return n&&typeof n=="object"&&!fe(n)&&Ut.call(n,"__wrapped__")?n:new K(n)}function B(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(ne?0:e);++re?Zt(0,u+e):e)||0,typeof u=="number"?a=-1<(nt(n)?n.indexOf(t,e):ht(n,t,e)):ae(n,function(n){return++ru&&(u=i)}}else t=!t&&nt(n)?F:a.createCallback(t,e),ae(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)});return u}function lt(n,t,e,r){var u=3>arguments.length;if(t=a.createCallback(t,r,4),fe(n)){var o=-1,i=n.length;for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=ce(n),u=i.length; -return t=a.createCallback(t,r,4),it(n,function(r,a,f){a=i?i[--u]:--u,e=o?(o=!1,n[a]):t(e,n[a],a,f)}),e}function st(n,t,e){var r;if(t=a.createCallback(t,e),fe(n)){e=-1;for(var u=n.length;++ee?Zt(0,u+e):e||0)-1;else if(e)return r=mt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])ht(f,p))&&((e||c)&&f.push(p),i.push(r))}return i}function bt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:h,variable:"",imports:{_:a}};var Ot={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},pe=Q(le),se=T(Ot,{g:Ot.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]"}),ve=T(Ot),ge=function(n){if(!n||Jt.call(n)!=O)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Mt(t))&&Mt(e); -return e?n==e||Mt(n)==e:G(n)};return At&&u&&typeof Gt=="function"&&(kt=_t(Gt,r)),Gt=8==te("08")?te:function(n,t){return te(nt(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=se,a.at=function(n){for(var t=-1,e=Kt.apply(Ft,M(arguments,1)),r=e.length,u=xt(r);++tht(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=Q,a.invoke=function(n,t){var e=M(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=xt(typeof a=="number"?a:0);return it(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) -}),o},a.keys=ce,a.map=ft,a.max=ct,a.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Ut.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=tt,a.min=function(n,t,e){var r=1/0,u=r;if(!t&&fe(n)){e=-1;for(var o=n.length;++eht(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=ce(n),r=e.length,u=xt(r);++te?Zt(0,r+e):ne(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=jt,a.noConflict=function(){return r._=Rt,this -},a.parseInt=Gt,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Pt(ee()*((+t||0)-n+1))},a.reduce=lt,a.reduceRight=pt,a.result=function(n,t){var r=n?n[t]:e;return X(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ce(n).length},a.some=st,a.sortedIndex=mt,a.template=function(n,t,r){var u=a.templateSettings;n||(n=""),r=ve({},r,u);var o,i=ve({},r.imports,u.imports),u=ce(i),i=et(i),f=0,s=r.interpolate||m,g="__p+='",s=$t((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,D),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=St(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,U)},a.uniqueId=function(n){var t=++o;return(null==n?"":n+"")+t},a.all=ut,a.any=st,a.detect=ot,a.foldl=lt,a.foldr=pt,a.include=rt,a.inject=lt,ie(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Vt.apply(t,arguments),n.apply(a,t)})}),a.first=vt,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 M(n,Zt(0,u-r))}},a.take=vt,a.head=vt,ie(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 K(r)})}),a.VERSION="1.0.1",a.prototype.toString=function(){return this.__wrapped__+""},a.prototype.value=Ct,a.prototype.valueOf=Ct,ae(["join","pop","shift"],function(n){var t=Ft[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),ae(["push","reverse","sort","unshift"],function(n){var t=Ft[n]; -a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),ae(["concat","slice","splice"],function(n){var t=Ft[n];a.prototype[n]=function(){return new K(t.apply(this.__wrapped__,arguments))}}),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(" "),k="[object Arguments]",w="[object Array]",j="[object Boolean]",C="[object Date]",x="[object Number]",O="[object Object]",N="[object RegExp]",S="[object String]",A={"[object Function]":!1}; -A[k]=A[w]=A[j]=A[C]=A[x]=A[O]=A[N]=A[S]=!0;var E={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},I={"\\":"\\","'":"'","\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 +;(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"&&!ve(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):bt(n,t,e)):le(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=ge(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;if(t=R.createCallback(t,e),ve(n)){e=-1; +for(var u=n.length;++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])bt(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:d,variable:"",imports:{_:R}};var It={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ye=Z(he),me=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]"}),de=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(b,""):n,t||0) +},R.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},R.assign=me,R.at=function(n){for(var t=-1,e=Gt.apply(zt,H(arguments,1)),r=e.length,u=Et(r);++tbt(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=ge,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&&ve(n)){e=-1;for(var a=n.length;++ebt(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=ge(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:ge(n).length},R.some=yt,R.sortedIndex=kt,R.template=function(n,t,u){var a=R.templateSettings;n||(n=""),u=de({},u,a);var o,i=de({},u.imports,a.imports),a=ge(i),i=ot(i),f=0,c=u.interpolate||_,l="__p+='",c=Tt((u.escape||_).source+"|"+c.source+"|"+(c===d?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,se(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,se(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,le(["join","pop","shift"],function(n){var t=zt[n];R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),le(["push","reverse","sort","unshift"],function(n){var t=zt[n]; +R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),le(["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*$/,d=/<%=([\s\S]+?)%>/g,b=/^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 diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index d5c850b12..a6a5bde3b 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -385,19 +385,12 @@ var index, iterable = collection, result = iterable; if (!iterable) return result; callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg); - var length = iterable.length; index = -1; - if (typeof length == 'number') { - while (++index < length) { - if (callback(iterable[index], index, collection) === indicatorObject) return result - } - } - else { + for (index in iterable) { if (hasOwnProperty.call(iterable, index)) { if (callback(iterable[index], index, collection) === indicatorObject) return result; } } - } }; /** @@ -1598,10 +1591,10 @@ var result = true; callback = createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { if (!(result = !!callback(collection[index], index, collection))) { break; @@ -1659,10 +1652,10 @@ var result = []; callback = createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { var value = collection[index]; if (callback(value, index, collection)) { @@ -1762,10 +1755,10 @@ * // => alerts each number value (order is not guaranteed) */ function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (callback && typeof thisArg == 'undefined' && typeof length == 'number') { while (++index < length) { if (callback(collection[index], index, collection) === indicatorObject) { break; @@ -1897,15 +1890,16 @@ */ function map(collection, callback, thisArg) { var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); + length = collection ? collection.length : 0; callback = createCallback(callback, thisArg); - if (isArray(collection)) { + if (typeof length == 'number') { + var result = Array(length); while (++index < length) { result[index] = callback(collection[index], index, collection); } } else { + result = []; each(collection, function(value, key, collection) { result[++index] = callback(value, key, collection); }); @@ -1956,10 +1950,10 @@ var computed = -Infinity, result = computed; - if (!callback && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (!callback && typeof length == 'number') { while (++index < length) { var value = collection[index]; if (value > result) { @@ -2023,10 +2017,10 @@ var computed = Infinity, result = computed; - if (!callback && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (!callback && typeof length == 'number') { while (++index < length) { var value = collection[index]; if (value < result) { @@ -2100,13 +2094,14 @@ * // => { 'a': 3, 'b': 6, 'c': 9 } */ function reduce(collection, callback, accumulator, thisArg) { + if (!collection) return accumulator; var noaccum = arguments.length < 3; callback = createCallback(callback, thisArg, 4); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection.length; + if (typeof length == 'number') { if (noaccum) { accumulator = collection[++index]; } diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index e8224690b..be96fef5a 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -4,31 +4,31 @@ * Build: `lodash underscore -o ./dist/lodash.underscore.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(n,t){var r;if(n&&vt[typeof n])for(r in t||(t=G),n)if(wt.call(n,r)&&t(n[r],r,n)===nt)break}function r(n,t){var r;if(n&&vt[typeof n])for(r in t||(t=G),n)if(t(n[r],r,n)===nt)break}function e(n,t,r){if(n){t=t&&typeof r=="undefined"?t:W(t,r);var e=n.length;if(r=-1,typeof e=="number")for(;++rt||typeof n=="undefined")return 1; -if(nr?0:r);++eo&&(o=a)}}else t=W(t,r),e(n,function(n,r,e){r=t(n,r,e),r>u&&(u=r,o=n)});return o}function q(n,t,r,u){var o=3>arguments.length;if(t=W(t,u,4),$t(n)){var i=-1,a=n.length;for(o&&(r=n[++i]);++iarguments.length; -if(typeof u!="number")var i=It(n),u=i.length;return t=W(t,e,4),B(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=L,n[a]):t(r,n[a],a,f)}),r}function M(n,t,r){var u;if(t=W(t,r),$t(n)){r=-1;for(var o=n.length;++rr?Ft(0,u+r):r||0)-1;else if(r)return e=P(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])z(a,f))&&(r&&a.push(f),i.push(e))}return i}function V(n,t){return Mt.fastBind||Et&&2t||typeof n=="undefined")return 1;if(nr?0:r);++eu&&(u=r,o=n)});else for(;++io&&(o=r);return o}function q(n,t,r,u){if(!n)return r;var o=3>arguments.length;t=W(t,u,4);var i=-1,a=n.length;if(typeof a=="number")for(o&&(r=n[++i]);++iarguments.length; +if(typeof u!="number")var i=It(n),u=i.length;return t=W(t,e,4),B(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=L,n[a]):t(r,n[a],a,f)}),r}function M(n,t,r){var u;if(t=W(t,r),$t(n)){r=-1;for(var o=n.length;++rr?Ft(0,u+r):r||0)-1;else if(r)return e=P(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])z(a,f))&&(r&&a.push(f),i.push(e))}return i}function V(n,t){return Mt.fastBind||Et&&2"']/g,ut=/['\n\r\t\u2028\u2029\\]/g,ot="[object Arguments]",it="[object Array]",at="[object Boolean]",ft="[object Date]",ct="[object Number]",lt="[object Object]",st="[object RegExp]",pt="[object String]",vt={"boolean":L,"function":J,object:J,number:L,string:L,undefined:L},gt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},ht=[],Y={},yt=n._,mt=RegExp("^"+(Y.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),_t=Math.ceil,dt=n.clearTimeout,bt=ht.concat,jt=Math.floor,wt=Y.hasOwnProperty,At=ht.push,xt=n.setTimeout,Ot=Y.toString,Et=mt.test(Et=s.bind)&&Et,St=mt.test(St=Array.isArray)&&St,Nt=n.isFinite,kt=n.isNaN,Bt=mt.test(Bt=Object.keys)&&Bt,Ft=Math.max,Rt=Math.min,qt=Math.random,Y=mt.test(n.attachEvent),Dt=Et&&!/\n|true/.test(Et+Y),Mt={}; +Y.global===Y&&(n=Y);var Z=0,nt={},tt=/&(?:amp|lt|gt|quot|#39);/g,rt=/($^)/,et=/[&<>"']/g,ut=/['\n\r\t\u2028\u2029\\]/g,ot="[object Arguments]",it="[object Array]",at="[object Boolean]",ft="[object Date]",ct="[object Number]",lt="[object Object]",pt="[object RegExp]",st="[object String]",vt={"boolean":L,"function":J,object:J,number:L,string:L,undefined:L},gt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},ht=[],Y={},yt=n._,mt=RegExp("^"+(Y.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),_t=Math.ceil,dt=n.clearTimeout,bt=ht.concat,jt=Math.floor,wt=Y.hasOwnProperty,At=ht.push,xt=n.setTimeout,Ot=Y.toString,Et=mt.test(Et=p.bind)&&Et,St=mt.test(St=Array.isArray)&&St,Nt=n.isFinite,kt=n.isNaN,Bt=mt.test(Bt=Object.keys)&&Bt,Ft=Math.max,Rt=Math.min,qt=Math.random,Y=mt.test(n.attachEvent),Dt=Et&&!/\n|true/.test(Et+Y),Mt={}; (function(){var n={0:1,length:1};Mt.argsObject=arguments.constructor==Object,Mt.fastBind=Et&&!Dt,Mt.spliceObjects=(ht.splice.call(n,0,1),!n[0])})(1),u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},c.prototype=u.prototype,v(arguments)||(v=function(n){return n?wt.call(n,"callee"):L});var $t=St||function(n){return Mt.argsObject&&n instanceof Array||Ot.call(n)==it},It=Bt?function(n){return w(n)?Bt(n):[]}:g,Tt={"&":"&","<":"<",">":">",'"':""","'":"'"},zt=_(Tt); j(/x/)&&(j=function(n){return n instanceof Function||"[object Function]"==Ot.call(n)});var Ct=F;u.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},u.bind=V,u.bindAll=function(n){for(var t=bt.apply(ht,arguments),r=1z(e,o,r)&&u.push(o)}return u},u.filter=N,u.flatten=T,u.forEach=B,u.functions=m,u.groupBy=function(n,t,r){var e={};return t=W(t,r),B(n,function(n,r,u){r=t(n,r,u)+"",(wt.call(e,r)?e[r]:e[r]=[]).push(n)}),e},u.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else e=t==K||r?1:t||e;return s(n,0,Rt(Ft(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++ez(o,i)){for(var a=r;--a;)if(0>z(t[a],i))continue n; -o.push(i)}}return o},u.invert=_,u.invoke=function(n,t){var r=s(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return B(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},u.keys=It,u.map=F,u.max=R,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return wt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u;if(!t&&$t(n)){r=-1;for(var i=n.length;++rz(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=J,r=n.apply(this,arguments),n=K,r)}},u.pairs=function(n){for(var t=-1,r=It(n),e=r.length,u=Array(e);++tz(arguments,u,1)&&e.push(u)}return e},u.wrap=function(n,t){return function(){var r=[n];return At.apply(r,arguments),t.apply(this,r)}},u.zip=function(n){for(var t=-1,r=n?R(Ct(arguments,"length")):0,e=Array(r);++tr?Ft(0,e+r):Rt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=H,u.noConflict=function(){return n._=yt,this},u.random=function(n,t){return n==K&&t==K&&(t=1),n=+n||0,t==K&&(t=n,n=0),n+jt(qt()*((+t||0)-n+1))},u.reduce=q,u.reduceRight=D,u.result=function(n,t){var r=n?n[t]:K; -return j(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:It(n).length},u.some=M,u.sortedIndex=P,u.template=function(n,t,r){n||(n=""),r=y({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||rt).source+"|"+(r.interpolate||rt).source+"|"+(r.evaluate||rt).source+"|$","g"),function(t,r,u,i,f){return o+=n.slice(e,f).replace(ut,a),r&&(o+="'+_['escape']("+r+")+'"),i&&(o+="';"+i+";__p+='"),u&&(o+="'+((__t=("+u+"))==null?'':__t)+'"),e=f+t.length,t -}),o+="';\n",i||(i="obj",o="with("+i+"||{}){"+o+"}"),o="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";try{var f=Function("_","return "+o)(u)}catch(c){throw c.source=o,c}return t?f(t):(f.source=o,f)},u.unescape=function(n){return n==K?"":(n+"").replace(tt,p)},u.uniqueId=function(n){var t=++Z+"";return n?n+t:t},u.all=S,u.any=M,u.detect=k,u.foldl=q,u.foldr=D,u.include=E,u.inject=q,u.first=I,u.last=function(n,t,r){if(n){var e=0,u=n.length; -if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==K||r)return n[u-1];return s(n,Ft(0,u-e))}},u.take=I,u.head=I,u.chain=function(n){return n=new c(n),n.__chain__=J,n},u.VERSION="1.0.1",H(u),u.prototype.chain=function(){return this.__chain__=J,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=ht[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!Mt.spliceObjects&&0===n.length&&delete n[0],this +return t[0]}},u.countBy=function(n,t,r){var e={};return t=W(t,r),B(n,function(n,r,u){r=t(n,r,u)+"",wt.call(e,r)?e[r]++:e[r]=1}),e},u.debounce=function(n,t,r){function e(){a=K,r||(o=n.apply(i,u))}var u,o,i,a;return function(){var f=r&&!a;return u=arguments,i=this,dt(a),a=xt(e,t),f&&(o=n.apply(i,u)),o}},u.defaults=y,u.defer=function(n){var t=p(arguments,1);return xt(function(){n.apply(void 0,t)},1)},u.delay=function(n,t){var r=p(arguments,2);return xt(function(){n.apply(void 0,r)},t)},u.difference=function(n){for(var t=-1,r=n.length,e=bt.apply(ht,arguments),u=[];++tz(e,o,r)&&u.push(o)}return u},u.filter=N,u.flatten=T,u.forEach=B,u.functions=m,u.groupBy=function(n,t,r){var e={};return t=W(t,r),B(n,function(n,r,u){r=t(n,r,u)+"",(wt.call(e,r)?e[r]:e[r]=[]).push(n)}),e},u.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else e=t==K||r?1:t||e;return p(n,0,Rt(Ft(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++ez(o,i)){for(var a=r;--a;)if(0>z(t[a],i))continue n; +o.push(i)}}return o},u.invert=_,u.invoke=function(n,t){var r=p(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return B(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},u.keys=It,u.map=F,u.max=R,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return wt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u,i=-1,a=n?n.length:0;if(t||typeof a!="number")t=W(t,r),e(n,function(n,r,e){r=t(n,r,e),rz(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=J,r=n.apply(this,arguments),n=K,r)}},u.pairs=function(n){for(var t=-1,r=It(n),e=r.length,u=Array(e);++tz(arguments,u,1)&&e.push(u)}return e},u.wrap=function(n,t){return function(){var r=[n];return At.apply(r,arguments),t.apply(this,r)}},u.zip=function(n){for(var t=-1,r=n?R(Ct(arguments,"length")):0,e=Array(r);++tr?Ft(0,e+r):Rt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=H,u.noConflict=function(){return n._=yt,this +},u.random=function(n,t){return n==K&&t==K&&(t=1),n=+n||0,t==K&&(t=n,n=0),n+jt(qt()*((+t||0)-n+1))},u.reduce=q,u.reduceRight=D,u.result=function(n,t){var r=n?n[t]:K;return j(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:It(n).length},u.some=M,u.sortedIndex=P,u.template=function(n,t,r){n||(n=""),r=y({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||rt).source+"|"+(r.interpolate||rt).source+"|"+(r.evaluate||rt).source+"|$","g"),function(t,r,u,i,f){return o+=n.slice(e,f).replace(ut,a),r&&(o+="'+_['escape']("+r+")+'"),i&&(o+="';"+i+";__p+='"),u&&(o+="'+((__t=("+u+"))==null?'':__t)+'"),e=f+t.length,t +}),o+="';\n",i||(i="obj",o="with("+i+"||{}){"+o+"}"),o="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";try{var f=Function("_","return "+o)(u)}catch(c){throw c.source=o,c}return t?f(t):(f.source=o,f)},u.unescape=function(n){return n==K?"":(n+"").replace(tt,s)},u.uniqueId=function(n){var t=++Z+"";return n?n+t:t},u.all=S,u.any=M,u.detect=k,u.foldl=q,u.foldr=D,u.include=E,u.inject=q,u.first=I,u.last=function(n,t,r){if(n){var e=0,u=n.length; +if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==K||r)return n[u-1];return p(n,Ft(0,u-e))}},u.take=I,u.head=I,u.chain=function(n){return n=new c(n),n.__chain__=J,n},u.VERSION="1.0.1",H(u),u.prototype.chain=function(){return this.__chain__=J,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=ht[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!Mt.spliceObjects&&0===n.length&&delete n[0],this }}),e(["concat","join","slice"],function(n){var t=ht[n];u.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new c(n),n.__chain__=J),n}}),Q&&!Q.nodeType?X?(X.exports=u)._=u:Q._=u:n._=u})(this); \ No newline at end of file