Tengo una variedad de objetos como tales...
const myObjects: MyObjects[] = [{id: 1, data: "blah"}, {id: 2, data: "foo"}, {id: 3, data: "bar"}];
Quiero configurar estos datos en un mapa basado en id.
La forma que tengo ahora es un bucle forEach
, pero ¿hay una forma más simple o un método que me falta en el tipo de Map
? Me encuentro haciendo esto una y otra vez y pensando debe ser una forma más sencilla.
es decir
const myMap = new Map<number, MyObject>(); myObjects.forEach(obj => { myMap.set(obj.id, obj); });
Quiero moverlos a un Map
para que sea más fácil acceder a ellos por identificación en lugar de iterar sobre toda la matriz.
¿Hay una forma más simple o un método que me falta en el tipo de mapa?
"Simple" es un poco subjetivo. Usualmente uso este enfoque porque cabe en una línea y porque inicializar un Map
con algunos elementos puede ser más rápido que inicializarlo y luego agregar elementos.
const myObjects: { id: number; data: string; }[] = [{id: 1, data: "blah"}, {id: 2, data: "foo"}, {id: 3, data: "bar"}]; const myMap = new Map(myObjects.map(obj => [obj.id, obj]));
Explicación: el constructor Map
toma un iterable de iterables (en este caso, una matriz de matrices) como primer parámetro. Cada elemento de la matriz principal es una entrada en el mapa, siendo la clave el primer elemento del elemento y el valor el segundo elemento del elemento.