started passing in 'list' as the third argument to all the iterators in underscore

This commit is contained in:
Jeremy Ashkenas
2009-10-29 10:53:23 -04:00
parent 42637b5880
commit 1d8420af00

View File

@@ -66,8 +66,8 @@
// Reduce builds up a single result from a list of values. Also known as // Reduce builds up a single result from a list of values. Also known as
// inject, or foldl. // inject, or foldl.
_.reduce = function(obj, memo, iterator, context) { _.reduce = function(obj, memo, iterator, context) {
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
memo = iterator.call(context, memo, value, index); memo = iterator.call(context, memo, value, index, list);
}); });
return memo; return memo;
}; };
@@ -75,8 +75,8 @@
// Return the first value which passes a truth test. // Return the first value which passes a truth test.
_.detect = function(obj, iterator, context) { _.detect = function(obj, iterator, context) {
var result; var result;
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
if (iterator.call(context, value, index)) { if (iterator.call(context, value, index, list)) {
result = value; result = value;
throw '__break__'; throw '__break__';
} }
@@ -89,8 +89,8 @@
_.select = function(obj, iterator, context) { _.select = function(obj, iterator, context) {
if (obj.filter) return obj.filter(iterator, context); if (obj.filter) return obj.filter(iterator, context);
var results = []; var results = [];
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
iterator.call(context, value, index) && results.push(value); iterator.call(context, value, index, list) && results.push(value);
}); });
return results; return results;
}; };
@@ -98,8 +98,8 @@
// Return all the elements for which a truth test fails. // Return all the elements for which a truth test fails.
_.reject = function(obj, iterator, context) { _.reject = function(obj, iterator, context) {
var results = []; var results = [];
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
!iterator.call(context, value, index) && results.push(value); !iterator.call(context, value, index, list) && results.push(value);
}); });
return results; return results;
}; };
@@ -110,8 +110,8 @@
iterator = iterator || identity; iterator = iterator || identity;
if (obj.every) return obj.every(iterator, context); if (obj.every) return obj.every(iterator, context);
var result = true; var result = true;
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
if (!(result = result && iterator.call(context, value, index))) throw '__break__'; if (!(result = result && iterator.call(context, value, index, list))) throw '__break__';
}); });
return result; return result;
}; };
@@ -122,8 +122,8 @@
iterator = iterator || identity; iterator = iterator || identity;
if (obj.some) return obj.some(iterator, context); if (obj.some) return obj.some(iterator, context);
var result = false; var result = false;
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
if (result = iterator.call(context, value, index)) throw '__break__'; if (result = iterator.call(context, value, index, list)) throw '__break__';
}); });
return result; return result;
}; };
@@ -160,8 +160,8 @@
_.max = function(obj, iterator, context) { _.max = function(obj, iterator, context) {
if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj); if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
var result = {computed : -Infinity}; var result = {computed : -Infinity};
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
var computed = iterator ? iterator.call(context, value, index) : value; var computed = iterator ? iterator.call(context, value, index, list) : value;
computed >= result.computed && (result = {value : value, computed : computed}); computed >= result.computed && (result = {value : value, computed : computed});
}); });
return result.value; return result.value;
@@ -171,8 +171,8 @@
_.min = function(obj, iterator, context) { _.min = function(obj, iterator, context) {
if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj); if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
var result = {computed : Infinity}; var result = {computed : Infinity};
_.each(obj, function(value, index) { _.each(obj, function(value, index, list) {
var computed = iterator ? iterator.call(context, value, index) : value; var computed = iterator ? iterator.call(context, value, index, list) : value;
computed < result.computed && (result = {value : value, computed : computed}); computed < result.computed && (result = {value : value, computed : computed});
}); });
return result.value; return result.value;
@@ -180,10 +180,10 @@
// Sort the object's values by a criteria produced by an iterator. // Sort the object's values by a criteria produced by an iterator.
_.sortBy = function(obj, iterator, context) { _.sortBy = function(obj, iterator, context) {
return _.pluck(_.map(obj, function(value, index) { return _.pluck(_.map(obj, function(value, index, list) {
return { return {
value : value, value : value,
criteria : iterator.call(context, value, index) criteria : iterator.call(context, value, index, list)
}; };
}).sort(function(left, right) { }).sort(function(left, right) {
var a = left.criteria, b = right.criteria; var a = left.criteria, b = right.criteria;