From 057da5bc82f823562f7642f19bd8d2dce58c2907 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Wed, 11 May 2011 10:27:52 -0400 Subject: [PATCH] Issue #202 ... fallback method for sparse arrays. --- test/collections.js | 6 +----- underscore.js | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/test/collections.js b/test/collections.js index 1ca9d5de2..32a1ee1bf 100644 --- a/test/collections.js +++ b/test/collections.js @@ -26,10 +26,6 @@ $(document).ready(function() { _.each([1, 2, 3], function(num, index, arr){ if (_.include(arr, num)) answer = true; }); ok(answer, 'can reference the original collection from inside the iterator'); - answers = []; - _.each({range : 1, speed : 2, length : 3}, function(v){ answers.push(v); }); - ok(answers.join(', '), '1, 2, 3', 'can iterate over objects with numeric length properties'); - answers = 0; _.each(null, function(){ ++answers; }); equals(answers, 0, 'handles a null properly'); @@ -185,7 +181,7 @@ $(document).ready(function() { people = _.sortBy(people, function(person){ return person.age; }); equals(_.pluck(people, 'name').join(', '), 'moe, curly', 'stooges sorted by age'); }); - + test('collections: groupBy', function() { var parity = _.groupBy([1, 2, 3, 4, 5, 6], function(num){ return num % 2; }); ok('0' in parity && '1' in parity, 'created a group for each value'); diff --git a/underscore.js b/underscore.js index a0ad75eec..2aa216835 100644 --- a/underscore.js +++ b/underscore.js @@ -73,7 +73,7 @@ obj.forEach(iterator, context); } else if (_.isNumber(obj.length)) { for (var i = 0, l = obj.length; i < l; i++) { - if (iterator.call(context, obj[i], i, obj) === breaker) return; + if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return; } } else { for (var key in obj) { @@ -250,7 +250,7 @@ return a < b ? -1 : a > b ? 1 : 0; }), 'value'); }; - + // Groups the object's values by a criterion produced by an iterator _.groupBy = function(obj, iterator) { var result = {}; @@ -512,7 +512,7 @@ var funcs = slice.call(arguments); return function() { var args = slice.call(arguments); - for (var i=funcs.length-1; i >= 0; i--) { + for (var i = funcs.length - 1; i >= 0; i--) { args = [funcs[i].apply(this, args)]; } return args[0];