From 2008bf90afcf02e189021acfbed76cd5345540ef Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 26 May 2012 00:07:50 -0400 Subject: [PATCH] Tweak `_.find` to avoid using `_.identity` and add benchmark. Former-commit-id: a881f90d00828ed6af5b2b0bc80c9ae6e2cb2da8 --- lodash.js | 11 +++++++---- perf/perf.js | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lodash.js b/lodash.js index 42240a7dd..c6ad50bca 100644 --- a/lodash.js +++ b/lodash.js @@ -302,6 +302,11 @@ 'inLoop': 'callback(collection[index], index, collection) && result.push(collection[index])' }; + /** Reusable iterator options for `find` and `forEach` */ + var forEachIteratorOptions = { + 'top': 'if (thisArg) callback = bind(callback, thisArg)' + }; + /** Reusable iterator options for `map`, `pluck`, and `values` */ var mapIteratorOptions = { 'init': '', @@ -584,7 +589,7 @@ * var even = _.find([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); * // => 2 */ - var find = createIterator(baseIteratorOptions, { + var find = createIterator(baseIteratorOptions, forEachIteratorOptions, { 'init': '', 'inLoop': 'if (callback(collection[index], index, collection)) return collection[index]' }); @@ -611,9 +616,7 @@ * _([1, 2, 3]).forEach(function(num) { alert(num); }).join(','); * // => alerts each number in turn and returns '1,2,3' */ - var forEach = createIterator(baseIteratorOptions, { - 'top': 'if (thisArg) callback = bind(callback, thisArg)' - }); + var forEach = createIterator(baseIteratorOptions, forEachIteratorOptions); /** * Produces a new array of values by mapping each value in the `collection` diff --git a/perf/perf.js b/perf/perf.js index dd6c8f52a..1bbba5dcb 100644 --- a/perf/perf.js +++ b/perf/perf.js @@ -205,6 +205,22 @@ /*--------------------------------------------------------------------------*/ + suites.push( + Benchmark.Suite('find') + .add('Lo-Dash', function() { + lodash.find(numbers, function(num) { + return num === 19; + }); + }) + .add('Underscore', function() { + _.find(numbers, function(num) { + return num === 19; + }); + }) + ); + + /*--------------------------------------------------------------------------*/ + suites.push( Benchmark.Suite('flatten deep') .add('Lo-Dash', function() {