Skip to content

Commit 5b4286e

Browse files
committed
Merge pull request #1867 from akre54/sorted-uniq-with-iteratee
Make _.uniq work with sorted = true and an iteratee
2 parents 1456d8f + e98c44e commit 5b4286e

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

test/arrays.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,20 @@
116116
list = [1, 2, 2, 3, 4, 4];
117117
deepEqual(_.uniq(list, true, iterator), [1, 2, 3, 4], 'iterator works with sorted array');
118118

119+
var kittens = [
120+
{kitten: 'Celery', cuteness: 8},
121+
{kitten: 'Juniper', cuteness: 10},
122+
{kitten: 'Spottis', cuteness: 10}
123+
];
124+
125+
var expected = [
126+
{kitten: 'Celery', cuteness: 8},
127+
{kitten: 'Juniper', cuteness: 10}
128+
];
129+
130+
deepEqual(_.uniq(kittens, true, 'cuteness'), expected, 'string iterator works with sorted array');
131+
132+
119133
var result = (function(){ return _.uniq(arguments); }(1, 2, 1, 3, 1, 4));
120134
deepEqual(result, [1, 2, 3, 4], 'works on an arguments object');
121135

underscore.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -507,12 +507,12 @@
507507
var result = [];
508508
var seen = [];
509509
for (var i = 0, length = array.length; i < length; i++) {
510-
var value = array[i];
510+
var value = array[i],
511+
computed = iteratee ? iteratee(value, i, array) : value;
511512
if (isSorted) {
512-
if (!i || seen !== value) result.push(value);
513-
seen = value;
513+
if (!i || seen !== computed) result.push(value);
514+
seen = computed;
514515
} else if (iteratee) {
515-
var computed = iteratee(value, i, array);
516516
if (_.indexOf(seen, computed) < 0) {
517517
seen.push(computed);
518518
result.push(value);

0 commit comments

Comments
 (0)