toDictionary
toDictionary
Converts an array of objects to a dictionary { [key: string]: T }. Accepts an
array T[] and a key of type string, number, or symbol. Returns a new
dictionary and does not mutate the original array.
Immutability is explained in the immutability & serializable state concept.
Example
const creatures = [
{ id: 1, type: 'cat' },
{ id: 2, type: 'dog' },
{ id: 3, type: 'parrot' },
];
const creaturesDictionary = toDictionary(creatures, 'id');
// creaturesDictionary will be:
// {
// 1: {id: 1, type: 'cat'},
// 2: {id: 2, type: 'dog'},
// 3: {id: 3, type: 'parrot'}
// };
Example — with rxState()
import { Component } from '@angular/core';
import { Subject } from 'rxjs';
import { rxState } from '@rx-angular/state';
import { toDictionary } from '@rx-angular/cdk/transformations';
@Component({
/* ... */
})
export class ListComponent {
readonly convertToDictionary$ = new Subject<void>();
private readonly state = rxState<ComponentState>(({ connect }) => {
connect('creaturesDictionary', this.convertToDictionary$, ({ creatures }) => toDictionary(creatures, 'id'));
});
readonly creaturesDictionary = this.state.signal('creaturesDictionary');
// Imperative alternative
convertToDictionary(): void {
this.state.set({
creaturesDictionary: toDictionary(this.state.get('creatures'), 'id'),
});
}
}
Example — signals-first
import { signal, computed } from '@angular/core';
import { toDictionary } from '@rx-angular/cdk/transformations';
const creatures = signal<Creature[]>([]);
const creaturesDictionary = computed(() => toDictionary(creatures(), 'id'));
Edge cases
toDictionary([] as any, 'nonExistingKey') > {};
toDictionary(items, 'nonExistingKey') > {};
toDictionary(items, 'nonPrimitiveKey' as any) > {};
toDictionary(items, null as any) > {};
toDictionary(nonObject as any, '') > {};
toDictionary(null as any, '') > null;
toDictionary(undefined as any, '') > undefined;
Signature
function toDictionary<T extends object>(source: T[], key: OnlyKeysOfSpecificType<T, number> | OnlyKeysOfSpecificType<T, string> | OnlyKeysOfSpecificType<T, symbol>): { [key: string]: T };
Parameters
source
typeof: T[]
key
typeof: | OnlyKeysOfSpecificType<T, number>
| OnlyKeysOfSpecificType<T, string>
| OnlyKeysOfSpecificType<T, symbol>