Ensure matches methods match arrays with duplicate values. [closes #2270]

This commit is contained in:
John-David Dalton
2016-04-22 22:01:29 -07:00
parent 4e38f70e0e
commit 43c26b5d6f
2 changed files with 38 additions and 4 deletions

View File

@@ -5010,10 +5010,12 @@
break;
}
// Recursively compare arrays (susceptible to call stack limits).
if (isUnordered) {
if (!arraySome(other, function(othValue) {
return arrValue === othValue ||
equalFunc(arrValue, othValue, customizer, bitmask, stack);
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!seen.has(othIndex) &&
(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
return seen.add(othIndex);
}
})) {
result = false;
break;

View File

@@ -10437,9 +10437,23 @@
source = { 'a': ['d', 'b'] };
actual = lodashStable.filter(objects, predicate);
assert.deepEqual(actual, []);
});
QUnit.test('should partial match arrays with duplicate values', function(assert) {
assert.expect(1);
var objects = [{ 'a': [1, 2] }, { 'a': [2, 2] }],
source = { 'a': [2, 2] };
var actual = lodashStable.filter(objects, function(object) {
return _.isMatch(object, source);
});
assert.deepEqual(actual, [objects[1]]);
});
QUnit.test('should partial match arrays of objects', function(assert) {
assert.expect(1);
@@ -13630,6 +13644,15 @@
assert.deepEqual(actual, []);
});
QUnit.test('should partial match arrays with duplicate values', function(assert) {
assert.expect(1);
var objects = [{ 'a': [1, 2] }, { 'a': [2, 2] }],
actual = lodashStable.filter(objects, _.matches({ 'a': [2, 2] }));
assert.deepEqual(actual, [objects[1]]);
});
QUnit.test('should partial match arrays of objects', function(assert) {
assert.expect(1);
@@ -14075,6 +14098,15 @@
assert.deepEqual(actual, []);
});
QUnit.test('should partial match arrays with duplicate values', function(assert) {
assert.expect(1);
var objects = [{ 'a': [1, 2] }, { 'a': [2, 2] }],
actual = lodashStable.filter(objects, _.matchesProperty('a', [2, 2]));
assert.deepEqual(actual, [objects[1]]);
});
QUnit.test('should partial match arrays of objects', function(assert) {
assert.expect(1);