| import { scan as higherOrderScan } from '../operators/scan'; |
| /* tslint:enable:max-line-length */ |
| /** |
| * Applies an accumulator function over the source Observable, and returns each |
| * intermediate result, with an optional seed value. |
| * |
| * <span class="informal">It's like {@link reduce}, but emits the current |
| * accumulation whenever the source emits a value.</span> |
| * |
| * <img src="./img/scan.png" width="100%"> |
| * |
| * Combines together all values emitted on the source, using an accumulator |
| * function that knows how to join a new source value into the accumulation from |
| * the past. Is similar to {@link reduce}, but emits the intermediate |
| * accumulations. |
| * |
| * Returns an Observable that applies a specified `accumulator` function to each |
| * item emitted by the source Observable. If a `seed` value is specified, then |
| * that value will be used as the initial value for the accumulator. If no seed |
| * value is specified, the first item of the source is used as the seed. |
| * |
| * @example <caption>Count the number of click events</caption> |
| * var clicks = Rx.Observable.fromEvent(document, 'click'); |
| * var ones = clicks.mapTo(1); |
| * var seed = 0; |
| * var count = ones.scan((acc, one) => acc + one, seed); |
| * count.subscribe(x => console.log(x)); |
| * |
| * @see {@link expand} |
| * @see {@link mergeScan} |
| * @see {@link reduce} |
| * |
| * @param {function(acc: R, value: T, index: number): R} accumulator |
| * The accumulator function called on each source value. |
| * @param {T|R} [seed] The initial accumulation value. |
| * @return {Observable<R>} An observable of the accumulated values. |
| * @method scan |
| * @owner Observable |
| */ |
| export function scan(accumulator, seed) { |
| if (arguments.length >= 2) { |
| return higherOrderScan(accumulator, seed)(this); |
| } |
| return higherOrderScan(accumulator)(this); |
| } |
| //# sourceMappingURL=scan.js.map |