Optimize _.contains for arrays.

Former-commit-id: 050743f77e7047f86d5b14b97d35846c9d2e749c
This commit is contained in:
John-David Dalton
2013-08-26 22:32:20 -07:00
parent c3f5bc6bfb
commit ea8e6d978d
7 changed files with 29 additions and 25 deletions

View File

@@ -119,7 +119,7 @@
'cloneDeep': ['baseClone', 'baseCreateCallback'],
'compact': [],
'compose': ['isFunction'],
'contains': ['baseEach', 'getIndexOf', 'isString'],
'contains': ['baseEach', 'getIndexOf', 'isArray', 'isString'],
'countBy': ['createAggregator'],
'createCallback': ['baseCreateCallback', 'baseIsEqual', 'isObject', 'keys'],
'curry': ['createBound'],
@@ -2924,7 +2924,7 @@
_.pull(funcDepMap.wrapperValueOf, 'wrapperToString');
}
if (!isLodash('contains')) {
_.pull(funcDepMap.contains, 'isString');
_.pull(funcDepMap.contains, 'isArray', 'isString');
}
if (!isLodash('flatten')) {
_.pull(funcDepMap.flatten, 'map');

13
dist/lodash.compat.js vendored
View File

@@ -3009,12 +3009,13 @@
result = false;
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
if (length && typeof length == 'number') {
result = (isString(collection)
? collection.indexOf(target, fromIndex)
: indexOf(collection, target, fromIndex)
) > -1;
} else {
if (isArray(collection)) {
result = indexOf(collection, target, fromIndex) > -1;
}
else if (typeof length == 'number' && isString(collection)) {
result = collection.indexOf(target, fromIndex) > -1;
}
else {
baseEach(collection, function(value) {
if (++index >= fromIndex) {
return !(result = value === target);

View File

@@ -17,9 +17,9 @@ var g=n&&n.__bindData__;if(g)return!a||1&g[1]||(g[4]=u),!a&&1&g[1]&&(t|=8),!l||4
var u=[];if(Le.enumPrototypes&&u.push('!(G&&n=="prototype")'),Le.enumErrorProps&&u.push('!(F&&(n=="message"||n=="name"))'),n.j&&n.f)r+="var C=-1,D=B[typeof t]&&v(t),u=D?D.length:0;while(++C<u){n=D[C];",u.length&&(r+="if("+u.join("&&")+"){"),r+=n.g+";",u.length&&(r+="}"),r+="}";else if(r+="for(n in t){",n.j&&u.push("m.call(t, n)"),u.length&&(r+="if("+u.join("&&")+"){"),r+=n.g+";",u.length&&(r+="}"),r+="}",Le.nonEnumShadows){for(r+="if(t!==A){var i=t.constructor,r=t===(i&&i.prototype),f=t===J?I:t===k?j:L.call(t),x=y[f];",k=0;7>k;k++)r+="n='"+n.h[k]+"';if((!(r&&x[n])&&m.call(t,n))",n.j||(r+="||(!x[n]&&t[n]!==A[n])"),r+="){"+n.g+"}";
r+="}"}return(n.b||Le.nonEnumArgs)&&(r+="}"),r+=n.c+";return E",t=t("d,j,k,m,o,p,q,s,v,A,B,y,I,J,L",e+r+"}"),s(n),t(V,q,oe,ve,_,pt,qe,dt,n.f,ae,U,ze,M,ie,we)}function at(n){return yt(n)?Ce(n):{}}function it(n){return He[n]}function lt(){var t=(t=y.indexOf)===Rt?n:t;return t}function ft(n){var t,e;return!n||we.call(n)!=G||(t=n.constructor,vt(t)&&!(t instanceof t))||!Le.argsClass&&pt(n)||!Le.nodeClass&&f(n)?!1:Le.ownLast?(nr(n,function(n,t,r){return e=ve.call(r,t),!1}),false!==e):(nr(n,function(n,t){e=t
}),e===v||ve.call(n,e))}function ct(n){return Ue[n]}function pt(n){return n&&typeof n=="object"?we.call(n)==$:!1}function st(n,t,e){var r=We(n),u=r.length;for(t=V(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function gt(n){var t=[];return nr(n,function(n,e){vt(n)&&t.push(e)}),t.sort()}function ht(n){for(var t=-1,e=We(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function vt(n){return typeof n=="function"}function yt(n){return!(!n||!U[typeof n])}function mt(n){return typeof n=="number"||we.call(n)==W
}function dt(n){return typeof n=="string"||we.call(n)==M}function _t(n){for(var t=-1,e=We(n),r=e.length,u=Ut(r);++t<r;)u[t]=n[e[t]];return u}function bt(n,t,e){var r=-1,u=lt(),o=n?n.length:0,a=!1;return e=(0>e?Ie(0,o+e):e)||0,o&&typeof o=="number"?a=-1<(dt(n)?n.indexOf(t,e):u(n,t,e)):Xe(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function wt(n,t,e){var r=!0;if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else Xe(n,function(n,e,u){return r=!!t(n,e,u)});return r
}function jt(n,t,e){var r=[];if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else Xe(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function kt(n,t,e){if(t=y.createCallback(t,e,3),!qe(n)){var r;return Xe(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];if(t(o,e,n))return o}}function xt(n,t,e){if(t&&typeof e=="undefined"&&qe(n)){e=-1;for(var r=n.length;++e<r&&false!==t(n[e],e,n););}else Xe(n,t,e);return n
}function Ct(n,t,e){var r=n,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:V(t,e,3),qe(n))for(;u--&&false!==t(n[u],u,n););else{if(typeof u!="number")var o=We(n),u=o.length;else Le.unindexedChars&&dt(n)&&(r=n.split(""));Xe(n,function(n,e,a){return e=o?o[--u]:--u,t(r[e],e,a)})}return n}function Et(n,t,e){var r=-1,u=n?n.length:0,o=Ut(typeof u=="number"?u:0);if(t=y.createCallback(t,e,3),qe(n))for(;++r<u;)o[r]=t(n[r],r,n);else Xe(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function Ot(n,t,e){var u=-1/0,o=u;
}function dt(n){return typeof n=="string"||we.call(n)==M}function _t(n){for(var t=-1,e=We(n),r=e.length,u=Ut(r);++t<r;)u[t]=n[e[t]];return u}function bt(n,t,e){var r=-1,u=lt(),o=n?n.length:0,a=!1;return e=(0>e?Ie(0,o+e):e)||0,qe(n)?a=-1<u(n,t,e):typeof o=="number"&&dt(n)?a=-1<n.indexOf(t,e):Xe(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function wt(n,t,e){var r=!0;if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else Xe(n,function(n,e,u){return r=!!t(n,e,u)
});return r}function jt(n,t,e){var r=[];if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else Xe(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function kt(n,t,e){if(t=y.createCallback(t,e,3),!qe(n)){var r;return Xe(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];if(t(o,e,n))return o}}function xt(n,t,e){if(t&&typeof e=="undefined"&&qe(n)){e=-1;for(var r=n.length;++e<r&&false!==t(n[e],e,n););}else Xe(n,t,e);
return n}function Ct(n,t,e){var r=n,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:V(t,e,3),qe(n))for(;u--&&false!==t(n[u],u,n););else{if(typeof u!="number")var o=We(n),u=o.length;else Le.unindexedChars&&dt(n)&&(r=n.split(""));Xe(n,function(n,e,a){return e=o?o[--u]:--u,t(r[e],e,a)})}return n}function Et(n,t,e){var r=-1,u=n?n.length:0,o=Ut(typeof u=="number"?u:0);if(t=y.createCallback(t,e,3),qe(n))for(;++r<u;)o[r]=t(n[r],r,n);else Xe(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function Ot(n,t,e){var u=-1/0,o=u;
if(!t&&qe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&dt(n)?r:y.createCallback(t,e,3),Xe(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function St(n,t,e,r){var u=3>arguments.length;if(t=V(t,r,4),qe(n)){var o=-1,a=n.length;for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n)}else Xe(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function At(n,t,e,r){var u=3>arguments.length;return t=V(t,r,4),Ct(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function It(n){var t=-1,e=n?n.length:0,r=Ut(typeof e=="number"?e:0);
return xt(n,function(n){var e=Mt(++t);r[t]=r[e],r[e]=n}),r}function Bt(n,t,e){var r;if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else Xe(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Dt(n){return n&&typeof n.length=="number"?Le.unindexedChars&&dt(n)?n.split(""):g(n):_t(n)}function Pt(e){var r=-1,u=lt(),a=e?e.length:0,i=X(arguments,!0,!0,1),l=[],f=a>=w&&u===n;if(f){var c=o(i);c?(u=t,i=c):f=!1}for(;++r<a;)c=e[r],0>u(i,c)&&l.push(c);return f&&s(i),l
}function Nt(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=-1;for(t=y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[0];return g(n,0,Be(Ie(0,r),u))}}function Rt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ie(0,u+r):r||0}else if(r)return r=$t(t,e),t[r]===e?r:-1;return n(t,e,r)}function Ft(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ie(0,t);

13
dist/lodash.js vendored
View File

@@ -2659,12 +2659,13 @@
result = false;
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
if (length && typeof length == 'number') {
result = (isString(collection)
? collection.indexOf(target, fromIndex)
: indexOf(collection, target, fromIndex)
) > -1;
} else {
if (isArray(collection)) {
result = indexOf(collection, target, fromIndex) > -1;
}
else if (typeof length == 'number' && isString(collection)) {
result = collection.indexOf(target, fromIndex) > -1;
}
else {
forOwn(collection, function(value) {
if (++index >= fromIndex) {
return !(result = value === target);

2
dist/lodash.min.js vendored
View File

@@ -16,7 +16,7 @@ if(f!=q)return!1;var f=n.constructor,p=t.constructor;if(f!=p&&!(ht(f)&&f instanc
}for(;++a<l;){var g=e[a],y=u?u(g,a,e):g;(r?!a||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(c(h.b),p(h)):u&&c(h),s}function ut(n){return function(t,e,r){var u={};e=Q.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var a=t[r];n(u,a,e(a,r,t),t)}else y(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ot(n,t,e,r,u,o){var a=1&t,i=2&t,f=4&t,l=8&t,c=16&t,p=32&t,s=n;if(!i&&!ht(n))throw new re;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);
var v=n&&n.__bindData__;if(v)return!a||1&v[1]||(v[4]=u),!a&&1&v[1]&&(t|=8),!f||4&v[1]||(v[5]=o),c&&ge.apply(v[2]||(v[2]=[]),e),p&&ge.apply(v[3]||(v[3]=[]),r),v[1]|=t,ot.apply(null,v);if(!a||i||f||p||!(Fe.fastBind||je&&c))g=function(){var v=arguments,h=a?u:this;return c&&de.apply(v,e),p&&ge.apply(v,r),f&&v.length<o?(t|=16,ot(n,l?t:-4&t,v,null,u,o)):(i&&(n=h[s]),this instanceof g?(h=gt(n.prototype)?ke(n.prototype):{},v=n.apply(h,v),gt(v)?v:h):n.apply(h,v))};else{if(c){var h=[u];ge.apply(h,e)}var g=c?je.apply(n,h):je.call(n,u)
}return Te(g,Re.call(arguments)),g}function at(n){return We[n]}function it(){var t=(t=Q.indexOf)===Dt?n:t;return t}function ft(n){var t,e;return n&&be.call(n)==q&&(t=n.constructor,!ht(t)||t instanceof t)?(d(n,function(n,t){e=t}),e===h||ve.call(n,e)):!1}function lt(n){return Pe[n]}function ct(n){return n&&typeof n=="object"?be.call(n)==B:!1}function pt(n,t,e){var r=qe(n),u=r.length;for(t=Z(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function st(n){var t=[];return d(n,function(n,e){ht(n)&&t.push(e)
}),t.sort()}function vt(n){for(var t=-1,e=qe(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function ht(n){return typeof n=="function"}function gt(n){return!(!n||!L[typeof n])}function yt(n){return typeof n=="number"||be.call(n)==z}function mt(n){return typeof n=="string"||be.call(n)==P}function _t(n){for(var t=-1,e=qe(n),r=e.length,u=Ht(r);++t<r;)u[t]=n[e[t]];return u}function bt(n,t,e){var r=-1,u=it(),o=n?n.length:0,a=!1;return e=(0>e?Ie(0,o+e):e)||0,o&&typeof o=="number"?a=-1<(mt(n)?n.indexOf(t,e):u(n,t,e)):y(n,function(n){return++r<e?void 0:!(a=n===t)
}),t.sort()}function vt(n){for(var t=-1,e=qe(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function ht(n){return typeof n=="function"}function gt(n){return!(!n||!L[typeof n])}function yt(n){return typeof n=="number"||be.call(n)==z}function mt(n){return typeof n=="string"||be.call(n)==P}function _t(n){for(var t=-1,e=qe(n),r=e.length,u=Ht(r);++t<r;)u[t]=n[e[t]];return u}function bt(n,t,e){var r=-1,u=it(),o=n?n.length:0,a=!1;return e=(0>e?Ie(0,o+e):e)||0,ze(n)?a=-1<u(n,t,e):typeof o=="number"&&mt(n)?a=-1<n.indexOf(t,e):y(n,function(n){return++r<e?void 0:!(a=n===t)
}),a}function dt(n,t,e){var r=!0;t=Q.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else y(n,function(n,e,u){return r=!!t(n,e,u)});return r}function wt(n,t,e){var r=[];t=Q.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}else y(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function jt(n,t,e){t=Q.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return y(n,function(n,e,r){return t(n,e,r)?(u=n,!1):void 0
}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function kt(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:Z(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else y(n,t);return n}function xt(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:Z(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=qe(n),r=u.length;y(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Ct(n,t,e){var r=-1,u=n?n.length:0;if(t=Q.createCallback(t,e,3),typeof u=="number")for(var o=Ht(u);++r<u;)o[r]=t(n[r],r,n);
else o=[],y(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function Ot(n,t,e){var u=-1/0,o=u;if(!t&&ze(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&mt(n)?r:Q.createCallback(t,e,3),kt(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Et(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Ht(r);++e<r;)u[e]=n[e][t];return u||Ct(n,t)}function It(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=Z(t,r,4);var o=-1,a=n.length;if(typeof a=="number")for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n);

View File

@@ -3028,12 +3028,13 @@
result = false;
fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
if (length && typeof length == 'number') {
result = (isString(collection)
? collection.indexOf(target, fromIndex)
: indexOf(collection, target, fromIndex)
) > -1;
} else {
if (isArray(collection)) {
result = indexOf(collection, target, fromIndex) > -1;
}
else if (typeof length == 'number' && isString(collection)) {
result = collection.indexOf(target, fromIndex) > -1;
}
else {
baseEach(collection, function(value) {
if (++index >= fromIndex) {
return !(result = value === target);

View File

@@ -562,6 +562,7 @@
(function() {
_.forEach({
'an `arguments` object': arguments,
'an array': [1, 2, 3, 1, 2, 3],
'an object': { 'a': 1, 'b': 2, 'c': 3, 'd': 1, 'e': 2, 'f': 3 },
'a string': '123123'
@@ -598,7 +599,7 @@
strictEqual(_.contains(collection, 'd'), false);
});
});
}());
}(1, 2, 3, 1, 2, 3));
/*--------------------------------------------------------------------------*/