123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { map } from './map';
- /**
- * Maps each source value (an object) to its specified nested property.
- *
- * <span class="informal">Like {@link map}, but meant only for picking one of
- * the nested properties of every emitted object.</span>
- *
- * <img src="./img/pluck.png" width="100%">
- *
- * Given a list of strings describing a path to an object property, retrieves
- * the value of a specified nested property from all values in the source
- * Observable. If a property can't be resolved, it will return `undefined` for
- * that value.
- *
- * @example <caption>Map every click to the tagName of the clicked target element</caption>
- * var clicks = Rx.Observable.fromEvent(document, 'click');
- * var tagNames = clicks.pluck('target', 'tagName');
- * tagNames.subscribe(x => console.log(x));
- *
- * @see {@link map}
- *
- * @param {...string} properties The nested properties to pluck from each source
- * value (an object).
- * @return {Observable} A new Observable of property values from the source values.
- * @method pluck
- * @owner Observable
- */
- export function pluck(...properties) {
- const length = properties.length;
- if (length === 0) {
- throw new Error('list of properties cannot be empty.');
- }
- return (source) => map(plucker(properties, length))(source);
- }
- function plucker(props, length) {
- const mapper = (x) => {
- let currentProp = x;
- for (let i = 0; i < length; i++) {
- const p = currentProp[props[i]];
- if (typeof p !== 'undefined') {
- currentProp = p;
- }
- else {
- return undefined;
- }
- }
- return currentProp;
- };
- return mapper;
- }
- //# sourceMappingURL=pluck.js.map
|