Permalink
Browse files

Tweak `_.find` to avoid using `_.identity` and add benchmark.

  • Loading branch information...
jdalton committed May 26, 2012
1 parent f044339 commit 672c1c25f0297935c9556d9add875a02e41fa6ca
Showing with 23 additions and 4 deletions.
  1. +7 −4 lodash.js
  2. +16 −0 perf/perf.js
View
@@ -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`
View
@@ -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() {

0 comments on commit 672c1c2

Please sign in to comment.