diff --git a/build/post-compile.js b/build/post-compile.js index c93a0773f..544318ea4 100644 --- a/build/post-compile.js +++ b/build/post-compile.js @@ -15,7 +15,7 @@ /*--------------------------------------------------------------------------*/ /** - * Post-process a given minified JavaScript `source`, preparing it for + * Post-process a given minified Lo-Dash `source`, preparing it for * deployment. * * @param {String} source The source to process. diff --git a/build/pre-compile.js b/build/pre-compile.js index df050921a..bbc57dcf4 100644 --- a/build/pre-compile.js +++ b/build/pre-compile.js @@ -198,7 +198,7 @@ /** * Pre-process a given Lo-Dash source, preparing it for minification. * - * @param {String} source The Lo-Dash source to process. + * @param {String} source The source to process. * @returns {String} Returns the processed source. */ function preprocess(source) { @@ -218,6 +218,9 @@ // remove brackets from `_.escape()` in `_.template` source = source.replace(/__e *= *_\['escape']/, '__e=_.escape'); + // remove brackets from `collection.indexOf` in `_.contains` + source = source.replace("collection['indexOf'](target)", 'collection.indexOf(target)'); + // remove brackets from `result[length].value` in `_.sortBy` source = source.replace("result[length]['value']", 'result[length].value'); diff --git a/lodash.js b/lodash.js index 9035cc0f1..7c179e282 100644 --- a/lodash.js +++ b/lodash.js @@ -514,10 +514,12 @@ data.firstArg = firstArg; data.hasDontEnumBug = hasDontEnumBug; data.isKeysFast = isKeysFast; - data.noCharByIndex = noCharByIndex; data.shadowed = shadowed; data.useHas = data.useHas !== false; + if (!('noCharByIndex' in data)) { + data.noCharByIndex = noCharByIndex; + } if (!data.exit) { data.exit = 'if (!' + firstArg + ') return result'; } @@ -711,11 +713,21 @@ * * _.contains([1, 2, 3], 3); * // => true + * + * _.contains({ 'name': 'moe', 'age': 40 }, 'moe'); + * // => true + * + * _.contains('curly', 'ur'); + * // => true */ var contains = createIterator({ 'args': 'collection, target', 'init': 'false', - 'inLoop': 'if (iteratee[index] === target) return true' + 'noCharByIndex': false, + 'beforeLoop': { + 'array': 'if (toString.call(iteratee) == stringClass) return collection.indexOf(target) > -1' + }, + 'inLoop': 'if (iteratee[index] === target) return true', }); /** @@ -2636,6 +2648,9 @@ * * _.isEmpty({}); * // => true + * + * _.isEmpty(''); + * // => true */ var isEmpty = createIterator({ 'args': 'value', diff --git a/test/test.js b/test/test.js index 1dd6c3e80..e2f900929 100644 --- a/test/test.js +++ b/test/test.js @@ -132,6 +132,23 @@ /*--------------------------------------------------------------------------*/ + QUnit.module('lodash.contains'); + + (function() { + _.each([ + { 'kind': 'literal', 'value': 'abc' }, + { 'kind': 'object', 'value': Object('abc') } + ], + function(data) { + test('should work with a string ' + data.kind + ' for `collection`', function() { + equal(_.contains(data.value, 'bc'), true); + equal(_.contains(data.value, 'd'), false); + }); + }); + }()); + + /*--------------------------------------------------------------------------*/ + QUnit.module('lodash.debounce'); (function() {