Conditional and Boolean Operators in RxJS: A Comprehensive Guide

Nandeep Barochiya
3 min readMay 28, 2024

--

Conditional and Boolean operators in RxJS allow you to perform operations based on specific conditions or Boolean logic. These operators are essential for implementing logic that depends on the presence or properties of emitted values. In this guide, we’ll explore five key conditional and boolean operators: defaultIfEmpty, every, find, findIndex, and isEmpty. Through real-time examples, we'll demonstrate how to use these operators effectively.

RxJS

List of Conditional and Boolean Operators

(Note: “⭐ — commonly used”)

  • defaultIfEmpty: Emits a specified default value if the source Observable completes without emitting any next value.
  • every: Emits true if all items emitted by the source Observable meet some criteria, or false otherwise.
  • find: Emits the first item emitted by the source Observable that meets some condition.
  • findIndex: Emits the index of the first item emitted by the source Observable that meets some condition.
  • isEmpty: Emits true if the source Observable completes without emitting any items, or false otherwise.

Now we will review each Conditional and Boolean Operator one by one and learn through examples.

defaultIfEmpty

Use Case: You want to provide a default value if an observable completes without emitting any values.

import { of, EMPTY } from 'rxjs';
import { defaultIfEmpty } from 'rxjs/operators';

// An observable that completes without emitting any value
const empty$ = EMPTY;

empty$.pipe(
defaultIfEmpty('Default value')
).subscribe(
value => console.log('Received:', value)
);

/* Output
Received: Default value
*/

The defaultIfEmpty operator emits the specified default value ('Default value') if the source observable completes without emitting any values.

every

Use Case: You want to check if all emitted values from an observable meet a specific condition.

import { of } from 'rxjs';
import { every } from 'rxjs/operators';

const numbers$ = of(1, 2, 3, 4, 5);

numbers$.pipe(
every(value => value < 6)
).subscribe(
result => console.log('All values are less than 6:', result)
);

/* Output
All values are less than 6: true
*/

The every operator checks if all emitted values are less than 6 and emit true if they are, otherwise false.

find

Use Case: You want to find the first value emitted by an observable that meets a specific condition.

import { of } from 'rxjs';
import { find } from 'rxjs/operators';

const numbers$ = of(1, 2, 3, 4, 5);

numbers$.pipe(
find(value => value > 3)
).subscribe(
value => console.log('First value greater than 3:', value)
);

/* Output
First value greater than 3: 4
*/

The find operator emits the first value greater than 3.

findIndex

Use Case: You want to find the index of the first value emitted by an observable that meets a specific condition.

import { of } from 'rxjs';
import { findIndex } from 'rxjs/operators';

const numbers$ = of(1, 2, 3, 4, 5);

numbers$.pipe(
findIndex(value => value > 3)
).subscribe(
index => console.log('Index of first value greater than 3:', index)
);

/* Output
Index of first value greater than 3: 3
*/

The findIndex operator emits the index of the first value greater than 3.

isEmpty

Use Case: You want to check if an observable emits any values.

import { of, EMPTY } from 'rxjs';
import { isEmpty } from 'rxjs/operators';

// An observable that completes without emitting any value
const empty$ = EMPTY;

empty$.pipe(
isEmpty()
).subscribe(
result => console.log('Is empty:', result)
);

/* Output
Is empty: true
*/

The isEmpty operator checks if the source observable emits any values and emits true if it does not, otherwise false.

Conclusion

In this guide, we explored the essential conditional and boolean operators in RxJS: defaultIfEmpty, every, find, findIndex, and isEmpty. These operators enable you to perform conditional operations, providing default values, checking conditions, and finding specific values or indices. By mastering these operators, you can enhance the logic and robustness of your reactive programming projects. We hope this comprehensive guide helps you leverage the full potential of RxJS conditional and boolean operators in your applications.

Happy coding!

--

--