Home Manual Reference Source Test Repository

es6/operator/partition.js

import { not } from '../util/not';
import { filter } from './filter';
/**
 * 将源 Observable 一分为二,一个是所有满足 predicate 函数的值,另一个是所有
 * 不满足 predicate 的值。
 *
 * <span class="informal">它很像 {@link filter},但是返回两个 Observables :
 * 一个像 {@link filter} 的输出, 而另一个是所有不符合条件的值。</span>
 *
 * <img src="./img/partition.png" width="100%">
 *
 * `partition` 输出有两个 Observables 的数组,这两个 Observables 是通过给定的 `predicate`
 * 函数将源 Observable 的值进行划分得到的。该数组的第一个 Observable 发出 predicate 参数
 * 返回 true 的源值。第二个 Observable 发出 predicate 参数返回 false 的源值。第一个像是
 * {@link filter} ,而第二个像是 predicate 取反的 {@link filter} 。
 *
 * @example <caption>将点击事件划分为点击 DIV 元素和点击其他元素</caption>
 * var clicks = Rx.Observable.fromEvent(document, 'click');
 * var parts = clicks.partition(ev => ev.target.tagName === 'DIV');
 * var clicksOnDivs = parts[0];
 * var clicksElsewhere = parts[1];
 * clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
 * clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));
 *
 * @see {@link filter}
 *
 * @param {function(value: T, index: number): boolean} predicate 评估源 Observable
 * 所发出的每个值的函数。如果它返回 `true` ,那么发出的值就在返回的数组中的第一个
 * Observable 中,如果返回的是 `false` ,那么发出的值就在返回的数组的第二个
 * Observable 中。`index` 参数是自订阅开始后发送序列的索引,是从 `0` 开始的。
 * @param {any} [thisArg] 可选参数,用来决定 `predicate` 函数中的 `this` 的值。
 * @return {[Observable<T>, Observable<T>]} 有两个 Observables 的数组:
 * 一个是通过 predicate 函数的所有值,另一个是没有通过 predicate 的所有值。
 * @method partition
 * @owner Observable
 */
export function partition(predicate, thisArg) {
    return [
        filter.call(this, predicate, thisArg),
        filter.call(this, not(predicate, thisArg))
    ];
}
//# sourceMappingURL=partition.js.map