From b3d68893df1af8291e1ae0da264b24f5558fb801 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 6 Oct 2012 18:09:49 -0700 Subject: [PATCH] Reduce deep `_.clone` array iteration and add `_.each` dependency. Former-commit-id: 3cb599d294a693974483b892748e6f60186d0c50 --- build.js | 2 +- lodash.js | 18 +++++----------- lodash.min.js | 58 +++++++++++++++++++++++++-------------------------- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/build.js b/build.js index a9e609479..8b147e250 100755 --- a/build.js +++ b/build.js @@ -67,7 +67,7 @@ 'bind': ['isFunction'], 'bindAll': ['bind', 'isFunction'], 'chain': ['mixin'], - 'clone': ['extend', 'forOwn', 'isArguments', 'isPlainObject'], + 'clone': ['extend', 'forEach', 'forOwn', 'isArguments', 'isPlainObject'], 'compact': [], 'compose': [], 'contains': [], diff --git a/lodash.js b/lodash.js index 167692e3b..1667b55e2 100644 --- a/lodash.js +++ b/lodash.js @@ -1065,7 +1065,6 @@ case regexpClass: return ctor(value.source, reFlags.exec(value)); } - // check for circular references and return corresponding clone stackA || (stackA = []); stackB || (stackB = []); @@ -1076,9 +1075,8 @@ return stackB[length]; } } - // init cloned object - var result = isArr ? ctor(length = value.length) : {}; + var result = isArr ? ctor(value.length) : {}; // add the source value to the stack of traversed objects // and associate it with its clone @@ -1086,16 +1084,10 @@ stackB.push(result); // recursively populate clone (susceptible to call stack limits) - if (isArr) { - var index = -1; - while (++index < length) { - result[index] = clone(value[index], deep, null, stackA, stackB); - } - } else { - forOwn(value, function(objValue, key) { - result[key] = clone(objValue, deep, null, stackA, stackB); - }); - } + (isArr ? forEach : forOwn)(value, function(objValue, key) { + result[key] = clone(objValue, deep, null, stackA, stackB); + }); + return result; } diff --git a/lodash.min.js b/lodash.min.js index ae8b41feb..e6df07de9 100644 --- a/lodash.min.js +++ b/lodash.min.js @@ -8,32 +8,32 @@ o&&(o={b:o,k:o}),e.c[s]=o.b,e.l[s]=o.k):e[s]=o}t=e.a;if("d"!=(e.f=/^[^,]+/.exec( );if(e.j&&e.q)i+="var n=-1,o=Y[typeof j]?l(j):[],k=o.length;"+e.l.d+";while(++ns;s++)i+="i='"+e.o[s]+"';if(","constructor"==e.o[s]&&(i+="!(g&&g.prototype===j)&&"),i+="h.call(j,i)){A=j[i];"+ e.l.h+"}"}if(e.c||e.m)i+="}"}return i+=e.e+";return t",Function("D,E,F,I,e,f,J,h,M,O,Q,S,T,X,Y,l,q,v,w,y,z","var G=function("+t+"){"+i+"};return G")(_t,_,L,u,K,f,Zt,Q,x,v,Vt,m,$t,vt,Pt,ot,Y,Z,gt,et)}function c(e){return"\\"+Ht[e]}function h(e){return Kt[e]}function p(){}function d(e){return Qt[e]}function v(e){return et.call(e)==lt}function m(e){return"function"==typeof e}function g(e){var t=i;if(!e||"object"!=typeof e||v(e))return t;var n=e.constructor;return(!kt||"function"==typeof e.toString||"string"!=typeof (e+""))&&(!m(n)||n instanceof n)?St?(Zt(e,function(e,n,r){return t=!Q.call(r,n),i}),t===i):(Zt(e,function(e,n){t=n}),t===i||Q.call(e,t)):t}function y(e,t,n,s,o){if(e==r)return e;n&&(t=i);if(n=Pt[typeof e]){var u=et.call(e);if(!Dt[u]||Tt&&v(e))return e;var a=u==ct,n=a||(u==vt?$t(e):n)}if(!n||!t)return n?a?Z.call(e):Yt({},e):e;n=e.constructor;switch(u){case ht:case pt:return new n(+e);case dt:case gt:return new n(e);case mt:return n(e.source,U.exec(e))}s||(s=[]),o||(o=[]);for(u=s.length;u--;)if(s[u -]==e)return o[u];var f=a?n(u=e.length):{};s.push(e),o.push(f);if(a)for(a=-1;++a++u;)if(c=J[u],Q.call(e,c)&&(!Q.call(t,c)||!b(e[c],t[c],s,o)))return i;return n}function w(e,t,n,r){var s=e,o=e?e.length:0,u=3>arguments.length;if(o!==+o)var a=rn(e),o=a.length;else Ct&&et.call(e)==gt&&(s=e.split(""));return vn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function E(e,t,n){if(e)return t==r||n?e[0]:Z.call(e,0,t)}function S(e,t){for(var n=-1,r=e?e.length:0,i=[];++nn?ut(0,i+n):n||0)-1;else if(n)return r=C(e,t),e[r]===t?r:-1;for(;++rr&&(r=n,o=e[i]);return o}function N(e,t,n){return e?Z.call(e,t==r||n?1:t):[]}function C(e,t,n,r){for(var i=0,s=e?e.length:i,n=f(n,r),t=n(t);i>>1,n(e[r])x(a,r))a.push(r),u.push(e[s]);return u}function L(e,t){return At||tt&&2|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/,F=/&(?:amp|lt|gt|quot|#x27);/g,I=/\b__p\+='';/g,q=/\b(__p\+=)''\+/g,R=/(__e\(.*?\)|\b__t\))\+'';/g,U=/\w*$/,z=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,W=RegExp("^"+(D.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g -,".+?")+"$"),X=/($^)/,V=/[&<>"']/g,$=/['\n\r\t\u2028\u2029\\]/g,J="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),K=_.concat,Q=D.hasOwnProperty,G=_.push,Y=D.propertyIsEnumerable,Z=_.slice,et=D.toString,tt=W.test(tt=Z.bind)&&tt,nt=Math.floor,rt=W.test(rt=Object.getPrototypeOf)&&rt,it=W.test(it=Array.isArray)&&it,st=e.isFinite,ot=W.test(ot=Object.keys)&&ot,ut=Math.max,at=Math.min,ft=Math.random,lt="[object Arguments]",ct="[object Array]",ht="[object Boolean]" -,pt="[object Date]",dt="[object Number]",vt="[object Object]",mt="[object RegExp]",gt="[object String]",yt=e.clearTimeout,bt=e.setTimeout,wt,Et,St,xt=n;(function(){function e(){this.x=1}var t={0:1,length:1},n=[];e.prototype={valueOf:1,y:1};for(var r in new e)n.push(r);for(r in arguments)xt=!r;wt=4>(n+"").length,St="x"!=n[0],Et=(n.splice.call(t,0,1),t[0])})(1);var Tt=!v(arguments),Nt="x"!=Z.call("x")[0],Ct="xx"!="x"[0]+Object("x")[0];try{var kt=("[object Object]",et.call(e.document||0)==vt)}catch(Lt){ -}var At=tt&&/\n|Opera/.test(tt+et.call(e.opera)),Ot=ot&&/^.+$|true/.test(ot+!!e.attachEvent),Mt=!At,_t={};_t[ht]=_t[pt]=_t["[object Function]"]=_t[dt]=_t[vt]=_t[mt]=i,_t[lt]=_t[ct]=_t[gt]=n;var Dt={};Dt[lt]=Dt["[object Function]"]=i,Dt[ct]=Dt[ht]=Dt[pt]=Dt[dt]=Dt[vt]=Dt[mt]=Dt[gt]=n;var Pt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i,unknown:n},Ht={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate -:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""};var Bt={a:"d,c,x",i:"d",p:"c=f(c,x)",h:"if(c(A,i,d)===false)return t"},jt={i:"{}",p:"c=f(c,x)",h:"var p=c(A,i,d);(h.call(t,p)?t[p]++:t[p]=1)"},Ft={i:"true",h:"if(!c(A,i,d))return!t"},It={q:i,r:i,a:"m",i:"m",p:"for(var a=1,b=arguments.length;a":">",'"':""","'":"'"},Qt=Xt(Kt),Gt=l(It,{h:"if(t[i]==null)"+It.h}),Yt=l(It),Zt=l(Bt,Rt,Ut,{q:i}),en=l(Bt,Rt,Ut),tn=l({q:i,a:"m",i:"[]",h:"if(S(A))t.push(i)",e:"t.sort()"}),nn=l({a:"A",i:"true",p:"var H=y.call(A),k=A.length;if(D[H]"+(Tt?"||O(A)":"")+"||(H==X&&k===+k&&S(A.splice)))return!k",h:{k:"return false"}}),rn=ot?function(e){var t=typeof e;return"function"==t&&Y.call(e,"prototype")?Jt(e):e&&Pt[t]?ot -(e):[]}:Jt,sn=l(It,{a:"m,dd,N",p:"var P,C=arguments,a=0;if(N==I){var b=2,ee=C[3],ff=C[4]}else var b=C.length,ee=[],ff=[];while(++a-1"},h:"if(A===hh)return true"}),cn=l(Bt,jt),hn=l(Bt,Ft),pn=l(Bt,qt),dn=l(Bt,Rt,{i:"z",h:"if(c(A,i,d))return A"}),vn=l(Bt,Rt),mn=l(Bt,jt,{h:"var p=c(A,i,d);(h.call(t,p)?t[p]:t[p]=[]).push(A)"}),gn=l(zt,{a:"d,U",p:"var C=v.call(arguments,2),R=typeof U=='function'",h:{b:"t[i]=(R?U:A[U]).apply(A,C)",k:"t"+(Ot?"[n]=":".push")+"((R?U:A[U]).apply(A,C))"}}),yn=l(Bt,zt -),bn=l(zt,{a:"d,bb",h:{b:"t[i]=A[bb]",k:"t"+(Ot?"[n]=":".push")+"(A[bb])"}}),wn=l({a:"d,c,B,x",i:"B",p:"var V=arguments.length<3;c=f(c,x)",d:{b:"if(V)t=j[++i]"},h:{b:"t=c(t,A,i,d)",k:"t=V?(V=false,A):c(t,A,i,d)"}}),En=l(Bt,qt,{h:"!"+qt.h}),Sn=l(Bt,Ft,{i:"false",h:Ft.h.replace("!","")}),xn=l(Bt,jt,zt,{h:{b:"t[i]={a:c(A,i,d),b:i,c:A}",k:"t"+(Ot?"[n]=":".push")+"({a:c(A,i,d),b:i,c:A})"},e:"t.sort(I);k=t.length;while(k--)t[k]=t[k].c"}),Tn=l(qt,{a:"d,aa",p:"var s=[];J(aa,function(A,p){s.push(p)});var cc=s.length" -,h:"for(var p,Z=true,r=0;r1){for(var i=1;ie?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=L,s.bindAll=Nn,s.chain=function(e){return e=new s(e),e.__chain__=n,e},s.clone=y,s.compact=function(e){for(var t=-1,n=e?e.length:0,r=[];++tx(s,u)){for(var a=1;an?ut(0,r+n):at(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},s.lateBind=function(e,t){return a(t,e,Z.call(arguments,2))},s.map=yn,s.max=T,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return Q.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=sn,s.min=function(e,t,n){for(var r=Infinity,i=-1,s=e?e.length:0,o=r,t=f(t,n);++i=f?(a=r,s=e.apply(o,i)):u||(u=bt(n,f)),s}},s.times= -function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++rx(r,t[e])&&r.push(t[e]);return r},s.uniq=k,s.uniqueId=function(e){var t=P++;return e?e+t:t},s.values=fn,s.where=Tn,s.without=function(e){for(var t=-1 -,n=e?e.length:0,r=o(arguments,1,20),i=[];++t++u;)if(c=J[u], +Q.call(e,c)&&(!Q.call(t,c)||!b(e[c],t[c],s,o)))return i;return n}function w(e,t,n,r){var s=e,o=e?e.length:0,u=3>arguments.length;if(o!==+o)var a=rn(e),o=a.length;else Ct&&et.call(e)==gt&&(s=e.split(""));return vn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function E(e,t,n){if(e)return t==r||n?e[0]:Z.call(e,0,t)}function S(e,t){for(var n=-1,r=e?e.length:0,i=[];++nn?ut(0,i+n):n||0)-1;else if(n)return r=C(e,t),e[r]===t?r:-1;for(;++rr&&(r=n,o=e[i]);return o}function N(e,t,n){return e?Z.call(e,t==r||n?1:t):[]}function C(e,t,n,r){for(var i=0,s=e?e.length:i,n=f(n,r),t=n(t);i>>1,n(e[r])x(a,r))a.push(r),u.push(e[s]);return u}function L(e,t){return At||tt&&2|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/,F=/&(?:amp|lt|gt|quot|#x27);/g,I=/\b__p\+='';/g,q=/\b(__p\+=)''\+/g,R=/(__e\(.*?\)|\b__t\))\+'';/g,U=/\w*$/,z=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,W=RegExp("^"+(D.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),X=/($^)/,V=/[&<>"']/g,$=/['\n\r\t\u2028\u2029\\]/g,J="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf" +.split(" "),K=_.concat,Q=D.hasOwnProperty,G=_.push,Y=D.propertyIsEnumerable,Z=_.slice,et=D.toString,tt=W.test(tt=Z.bind)&&tt,nt=Math.floor,rt=W.test(rt=Object.getPrototypeOf)&&rt,it=W.test(it=Array.isArray)&&it,st=e.isFinite,ot=W.test(ot=Object.keys)&&ot,ut=Math.max,at=Math.min,ft=Math.random,lt="[object Arguments]",ct="[object Array]",ht="[object Boolean]",pt="[object Date]",dt="[object Number]",vt="[object Object]",mt="[object RegExp]",gt="[object String]",yt=e.clearTimeout,bt=e.setTimeout,wt,Et +,St,xt=n;(function(){function e(){this.x=1}var t={0:1,length:1},n=[];e.prototype={valueOf:1,y:1};for(var r in new e)n.push(r);for(r in arguments)xt=!r;wt=4>(n+"").length,St="x"!=n[0],Et=(n.splice.call(t,0,1),t[0])})(1);var Tt=!v(arguments),Nt="x"!=Z.call("x")[0],Ct="xx"!="x"[0]+Object("x")[0];try{var kt=("[object Object]",et.call(e.document||0)==vt)}catch(Lt){}var At=tt&&/\n|Opera/.test(tt+et.call(e.opera)),Ot=ot&&/^.+$|true/.test(ot+!!e.attachEvent),Mt=!At,_t={};_t[ht]=_t[pt]=_t["[object Function]"]= +_t[dt]=_t[vt]=_t[mt]=i,_t[lt]=_t[ct]=_t[gt]=n;var Dt={};Dt[lt]=Dt["[object Function]"]=i,Dt[ct]=Dt[ht]=Dt[pt]=Dt[dt]=Dt[vt]=Dt[mt]=Dt[gt]=n;var Pt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i,unknown:n},Ht={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""};var Bt={a:"d,c,x",i:"d",p:"c=f(c,x)",h:"if(c(A,i,d)===false)return t"},jt={i +:"{}",p:"c=f(c,x)",h:"var p=c(A,i,d);(h.call(t,p)?t[p]++:t[p]=1)"},Ft={i:"true",h:"if(!c(A,i,d))return!t"},It={q:i,r:i,a:"m",i:"m",p:"for(var a=1,b=arguments.length;a":">",'"':""","'":"'"},Qt=Xt(Kt),Gt=l(It,{ +h:"if(t[i]==null)"+It.h}),Yt=l(It),Zt=l(Bt,Rt,Ut,{q:i}),en=l(Bt,Rt,Ut),tn=l({q:i,a:"m",i:"[]",h:"if(S(A))t.push(i)",e:"t.sort()"}),nn=l({a:"A",i:"true",p:"var H=y.call(A),k=A.length;if(D[H]"+(Tt?"||O(A)":"")+"||(H==X&&k===+k&&S(A.splice)))return!k",h:{k:"return false"}}),rn=ot?function(e){var t=typeof e;return"function"==t&&Y.call(e,"prototype")?Jt(e):e&&Pt[t]?ot(e):[]}:Jt,sn=l(It,{a:"m,dd,N",p:"var P,C=arguments,a=0;if(N==I){var b=2,ee=C[3],ff=C[4]}else var b=C.length,ee=[],ff=[];while(++a-1"},h:"if(A===hh)return true"}),cn=l(Bt,jt),hn=l(Bt,Ft),pn=l(Bt,qt),dn=l(Bt,Rt,{i:"z",h:"if(c(A,i,d))return A"}),vn=l(Bt,Rt),mn=l(Bt,jt,{h:"var p=c(A,i,d);(h.call(t,p)?t[p]:t[p]=[]).push(A)"}),gn=l(zt,{a:"d,U",p:"var C=v.call(arguments,2),R=typeof U=='function'",h:{b:"t[i]=(R?U:A[U]).apply(A,C)",k:"t"+(Ot?"[n]=":".push")+"((R?U:A[U]).apply(A,C))"}}),yn=l(Bt,zt),bn=l(zt,{a:"d,bb",h:{b:"t[i]=A[bb]",k:"t"+(Ot?"[n]=":".push")+"(A[bb])" +}}),wn=l({a:"d,c,B,x",i:"B",p:"var V=arguments.length<3;c=f(c,x)",d:{b:"if(V)t=j[++i]"},h:{b:"t=c(t,A,i,d)",k:"t=V?(V=false,A):c(t,A,i,d)"}}),En=l(Bt,qt,{h:"!"+qt.h}),Sn=l(Bt,Ft,{i:"false",h:Ft.h.replace("!","")}),xn=l(Bt,jt,zt,{h:{b:"t[i]={a:c(A,i,d),b:i,c:A}",k:"t"+(Ot?"[n]=":".push")+"({a:c(A,i,d),b:i,c:A})"},e:"t.sort(I);k=t.length;while(k--)t[k]=t[k].c"}),Tn=l(qt,{a:"d,aa",p:"var s=[];J(aa,function(A,p){s.push(p)});var cc=s.length",h:"for(var p,Z=true,r=0;r1){for(var i=1;ie?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=L,s.bindAll=Nn,s.chain=function(e){return e=new s(e),e.__chain__=n,e},s.clone=y,s.compact=function(e){for(var t=-1,n=e?e.length:0,r=[];++tx(s,u)){for(var a=1;an?ut(0,r+n):at(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},s.lateBind= +function(e,t){return a(t,e,Z.call(arguments,2))},s.map=yn,s.max=T,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return Q.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=sn,s.min=function(e,t,n){for(var r=Infinity,i=-1,s=e?e.length:0,o=r,t=f(t,n);++i=f?(a=r,s=e.apply(o,i)):u||(u=bt(n,f)),s}},s.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++rx(r,t[e])&&r.push(t[e]);return r},s.uniq=k,s.uniqueId=function(e){var t=P++;return e?e+t:t},s.values=fn,s.where=Tn,s.without=function(e){for(var t=-1,n=e?e.length:0,r=o(arguments,1,20),i=[];++t