From 1b6b8571b770e9c1b7fcca8b6cff7114f1d0db3a Mon Sep 17 00:00:00 2001 From: Casey Howard Date: Thu, 11 Dec 2014 10:10:58 -0800 Subject: [PATCH] fix(filterFilter): Fix filtering using an object expression when the filter value is undefined Fixes #10419 --- src/ng/filter/filter.js | 4 ++++ test/ng/filter/filterSpec.js | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/ng/filter/filter.js b/src/ng/filter/filter.js index a739a1ca21c7..f594837af0f2 100644 --- a/src/ng/filter/filter.js +++ b/src/ng/filter/filter.js @@ -151,6 +151,10 @@ function createPredicateFn(expression, comparator, matchAgainstAnyProp) { comparator = equals; } else if (!isFunction(comparator)) { comparator = function(actual, expected) { + if (isUndefined(expected)) { + return true; + } + if (isObject(actual) || isObject(expected)) { // Prevent an object to be considered equal to a string like `'[object'` return false; diff --git a/test/ng/filter/filterSpec.js b/test/ng/filter/filterSpec.js index 7e14f5f567f4..e924e4d08500 100644 --- a/test/ng/filter/filterSpec.js +++ b/test/ng/filter/filterSpec.js @@ -48,6 +48,18 @@ describe('Filter: filter', function() { }); + it('should filter when property is undefined', function() { + var items = [{name: 'a'}, {name: 'abc'}]; + expect(filter(items, {name: undefined})).toEqual([{name: 'a'}, {name: 'abc'}]); + }); + + + it('should filter when a deep property is undefined', function() { + var items = [{name: 'a'}, {name: 'abc'}, {deep: {name: 'abc'}}]; + expect(filter(items, {deep: {name: undefined}})).toEqual([{deep: {name: 'abc'}}]); + }); + + it('should take function as predicate', function() { var items = [{name: 'a'}, {name: 'abc', done: true}]; expect(filter(items, function(i) {return i.done;}).length).toBe(1);