mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 06:08:33 +00:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | "use strict"; | ||
|  | var groupBy_1 = require('../operators/groupBy'); | ||
|  | exports.GroupedObservable = groupBy_1.GroupedObservable; | ||
|  | /* tslint:enable:max-line-length */ | ||
|  | /** | ||
|  |  * Groups the items emitted by an Observable according to a specified criterion, | ||
|  |  * and emits these grouped items as `GroupedObservables`, one | ||
|  |  * {@link GroupedObservable} per group. | ||
|  |  * | ||
|  |  * <img src="./img/groupBy.png" width="100%"> | ||
|  |  * | ||
|  |  * @example <caption>Group objects by id and return as array</caption> | ||
|  |  * Observable.of<Obj>({id: 1, name: 'aze1'}, | ||
|  |  *                    {id: 2, name: 'sf2'}, | ||
|  |  *                    {id: 2, name: 'dg2'}, | ||
|  |  *                    {id: 1, name: 'erg1'}, | ||
|  |  *                    {id: 1, name: 'df1'}, | ||
|  |  *                    {id: 2, name: 'sfqfb2'}, | ||
|  |  *                    {id: 3, name: 'qfs3'}, | ||
|  |  *                    {id: 2, name: 'qsgqsfg2'} | ||
|  |  *     ) | ||
|  |  *     .groupBy(p => p.id) | ||
|  |  *     .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], [])) | ||
|  |  *     .subscribe(p => console.log(p)); | ||
|  |  * | ||
|  |  * // displays:
 | ||
|  |  * // [ { id: 1, name: 'aze1' },
 | ||
|  |  * //   { id: 1, name: 'erg1' },
 | ||
|  |  * //   { id: 1, name: 'df1' } ]
 | ||
|  |  * //
 | ||
|  |  * // [ { id: 2, name: 'sf2' },
 | ||
|  |  * //   { id: 2, name: 'dg2' },
 | ||
|  |  * //   { id: 2, name: 'sfqfb2' },
 | ||
|  |  * //   { id: 2, name: 'qsgqsfg2' } ]
 | ||
|  |  * //
 | ||
|  |  * // [ { id: 3, name: 'qfs3' } ]
 | ||
|  |  * | ||
|  |  * @example <caption>Pivot data on the id field</caption> | ||
|  |  * Observable.of<Obj>({id: 1, name: 'aze1'}, | ||
|  |  *                    {id: 2, name: 'sf2'}, | ||
|  |  *                    {id: 2, name: 'dg2'}, | ||
|  |  *                    {id: 1, name: 'erg1'}, | ||
|  |  *                    {id: 1, name: 'df1'}, | ||
|  |  *                    {id: 2, name: 'sfqfb2'}, | ||
|  |  *                    {id: 3, name: 'qfs1'}, | ||
|  |  *                    {id: 2, name: 'qsgqsfg2'} | ||
|  |  *                   ) | ||
|  |  *     .groupBy(p => p.id, p => p.name) | ||
|  |  *     .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], ["" + group$.key])) | ||
|  |  *     .map(arr => ({'id': parseInt(arr[0]), 'values': arr.slice(1)})) | ||
|  |  *     .subscribe(p => console.log(p)); | ||
|  |  * | ||
|  |  * // displays:
 | ||
|  |  * // { id: 1, values: [ 'aze1', 'erg1', 'df1' ] }
 | ||
|  |  * // { id: 2, values: [ 'sf2', 'dg2', 'sfqfb2', 'qsgqsfg2' ] }
 | ||
|  |  * // { id: 3, values: [ 'qfs1' ] }
 | ||
|  |  * | ||
|  |  * @param {function(value: T): K} keySelector A function that extracts the key | ||
|  |  * for each item. | ||
|  |  * @param {function(value: T): R} [elementSelector] A function that extracts the | ||
|  |  * return element for each item. | ||
|  |  * @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector] | ||
|  |  * A function that returns an Observable to determine how long each group should | ||
|  |  * exist. | ||
|  |  * @return {Observable<GroupedObservable<K,R>>} An Observable that emits | ||
|  |  * GroupedObservables, each of which corresponds to a unique key value and each | ||
|  |  * of which emits those items from the source Observable that share that key | ||
|  |  * value. | ||
|  |  * @method groupBy | ||
|  |  * @owner Observable | ||
|  |  */ | ||
|  | function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) { | ||
|  |     return groupBy_1.groupBy(keySelector, elementSelector, durationSelector, subjectSelector)(this); | ||
|  | } | ||
|  | exports.groupBy = groupBy; | ||
|  | //# sourceMappingURL=groupBy.js.map
 |