feat(query): add filter and reduce to QueryList

Closes #4710
This commit is contained in:
vsavkin 2015-10-13 16:50:46 -07:00 committed by Victor Savkin
parent 9fc24b9c52
commit bfbf18d983
3 changed files with 39 additions and 6 deletions

View File

@ -22,11 +22,6 @@ class QueryList<T> extends Object
return _results.toString(); return _results.toString();
} }
List map(fn(T)) {
// Note: we need to return a list instead of iterable to match JS.
return this._results.map(fn).toList();
}
/** @internal */ /** @internal */
void reset(List<T> newList) { void reset(List<T> newList) {
_results = newList; _results = newList;

View File

@ -37,10 +37,25 @@ export class QueryList<T> {
get last(): T { return ListWrapper.last(this._results); } get last(): T { return ListWrapper.last(this._results); }
/** /**
* returns a new list with the passsed in function applied to each element. * returns a new array with the passed in function applied to each element.
*/ */
map<U>(fn: (item: T) => U): U[] { return this._results.map(fn); } map<U>(fn: (item: T) => U): U[] { return this._results.map(fn); }
/**
* returns a filtered array.
*/
filter(fn: (item: T) => boolean): T[] { return this._results.filter(fn); }
/**
* returns a reduced value.
*/
reduce<U>(fn: (acc: U, item: T) => U, init: U): U { return this._results.reduce(fn, init); }
/**
* converts QueryList into an array
*/
toArray(): T[] { return ListWrapper.clone(this._results); }
[getSymbolIterator()](): any { return this._results[getSymbolIterator()](); } [getSymbolIterator()](): any { return this._results[getSymbolIterator()](); }
toString(): string { return this._results.toString(); } toString(): string { return this._results.toString(); }

View File

@ -10,6 +10,7 @@ import {
fakeAsync, fakeAsync,
tick tick
} from 'angular2/testing_internal'; } from 'angular2/testing_internal';
import {IS_DART} from '../../platform';
import {MapWrapper, ListWrapper, iterateListLike} from 'angular2/src/core/facade/collection'; import {MapWrapper, ListWrapper, iterateListLike} from 'angular2/src/core/facade/collection';
import {StringWrapper} from 'angular2/src/core/facade/lang'; import {StringWrapper} from 'angular2/src/core/facade/lang';
@ -46,6 +47,28 @@ export function main() {
expect(queryList.map((x) => x)).toEqual(['one', 'two']); expect(queryList.map((x) => x)).toEqual(['one', 'two']);
}); });
if (!IS_DART) {
it('should support filter', () => {
queryList.reset(['one', 'two']);
expect((<any>queryList).filter((x) => x == "one")).toEqual(['one']);
});
it('should support reduce', () => {
queryList.reset(["one", "two"]);
expect((<any>queryList).reduce((a, x) => a + x, "start:")).toEqual("start:onetwo");
});
it('should support toArray', () => {
queryList.reset(["one", "two"]);
expect((<any>queryList).reduce((a, x) => a + x, "start:")).toEqual("start:onetwo");
});
it('should support toArray', () => {
queryList.reset(["one", "two"]);
expect((<any>queryList).toArray()).toEqual(["one", "two"]);
});
}
it('should support toString', () => { it('should support toString', () => {
queryList.reset(['one', 'two']); queryList.reset(['one', 'two']);
var listString = queryList.toString(); var listString = queryList.toString();