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

Former-commit-id: a881f90d00828ed6af5b2b0bc80c9ae6e2cb2da8
This commit is contained in:
John-David Dalton
2012-05-26 00:07:50 -04:00
parent 06ffa93bd0
commit 2008bf90af
2 changed files with 23 additions and 4 deletions

View File

@@ -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 File

@@ -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() {