Skip to content

Commit bb4a606

Browse files
committed
Merge pull request #2109 from jridgewell/contains-gaurd
Guard _.contains fromIndex
2 parents 02bcfe3 + cdb13b6 commit bb4a606

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

test/collections.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,14 @@
427427
strictEqual(_.includes, _.contains, 'alias for includes');
428428

429429
var numbers = [1, 2, 3, 1, 2, 3, 1, 2, 3];
430-
strictEqual(_.includes(numbers, 1, 1), true);
431-
strictEqual(_.includes(numbers, 1, -1), false);
432-
strictEqual(_.includes(numbers, 1, -2), false);
433-
strictEqual(_.includes(numbers, 1, -3), true);
434-
strictEqual(_.includes(numbers, 1, 6), true);
435-
strictEqual(_.includes(numbers, 1, 7), false);
430+
strictEqual(_.includes(numbers, 1, 1), true, 'contains takes a fromIndex');
431+
strictEqual(_.includes(numbers, 1, -1), false, 'contains takes a fromIndex');
432+
strictEqual(_.includes(numbers, 1, -2), false, 'contains takes a fromIndex');
433+
strictEqual(_.includes(numbers, 1, -3), true, 'contains takes a fromIndex');
434+
strictEqual(_.includes(numbers, 1, 6), true, 'contains takes a fromIndex');
435+
strictEqual(_.includes(numbers, 1, 7), false, 'contains takes a fromIndex');
436+
437+
ok(_.every([1, 2, 3], _.partial(_.contains, numbers)), 'fromIndex is guarded');
436438
});
437439

438440
test('includes with NaN', function() {

underscore.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,12 @@
252252
return false;
253253
};
254254

255-
// Determine if the array or object contains a given value (using `===`).
255+
// Determine if the array or object contains a given item (using `===`).
256256
// Aliased as `includes` and `include`.
257-
_.contains = _.includes = _.include = function(obj, target, fromIndex) {
257+
_.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
258258
if (!isArrayLike(obj)) obj = _.values(obj);
259-
return _.indexOf(obj, target, typeof fromIndex == 'number' && fromIndex) >= 0;
259+
if (typeof fromIndex != 'number' || guard) fromIndex = 0;
260+
return _.indexOf(obj, item, fromIndex) >= 0;
260261
};
261262

262263
// Invoke a method (with arguments) on every item in a collection.

0 commit comments

Comments
 (0)