Observable: map() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The map() method of the Observable interface returns a new observable that emits the values of the source observable, each transformed by a mapping function.

Syntax

js
map(mapper)

Parameters

mapper

A function to execute for each value emitted by the source observable. Its return value is emitted by the returned observable. The function is called with the following arguments:

value

The current value being processed.

index

The index of the current value being processed, starting from 0.

Return value

A new Observable. When subscribed to, it calls mapper for each value emitted by the source observable and emits the return value. When the source completes, the returned observable also completes.

Description

Like other observable-returning operators, this method is lazy: calling it creates a new observable without subscribing to the source. Processing starts when the returned observable is subscribed to.

If mapper throws an exception, the returned observable errors and unsubscribes from the source. Errors from the source are also forwarded.

The return value of mapper is emitted as-is. In particular, a returned promise is emitted as a promise object; it is not awaited. To emit values from a returned promise or another observable, use flatMap() or switchMap().

Examples

Using map()

This example displays the mouse coordinates when the pointer moves over either of two <div> elements. The mapping function extracts the coordinates from each mouse event into an object with x and y properties.

js
const outputElem = document.querySelector("p");

document.body
  .when("mousemove")
  .filter((e) => e.target.matches("div"))
  .map((e) => ({ x: e.clientX, y: e.clientY }))
  .subscribe({ next: reportCoords });

function reportCoords(e) {
  outputElem.textContent = `${e.x},${e.y}`;
}

Specifications

Specification
Observable
# dom-observable-map

Browser compatibility

See also