Angular documentation states that it's possible to write complex template expressions in template, but it's a better practice to avoid them if those expressions don't finish quickly. It means that we should avoid long executable computation in templates.
The reason is that Angular compiles templates into executable pieces of code that are executed during each change detection cycle. And if you have already been working for a while with Angular you should notice how many change detection cycles are executed in app.
So, taken your template:
*ngFor="let elem of someMap.get(keyToAnArray)"
we will have smth like:
component factory
// part of change detection code starts here
...
i0.ɵɵproperty("ngForOf", ctx.someMap.get(ctx.keyToAnArray));
...
The main question we need to answer is: How fast is Map.prototype.get()
method?
From the specification:
Map object must be implemented using either hash tables or other
mechanisms that, on average, provide access times that are sublinear
on the number of elements in the collection.
In other words, we can think of Map
as of implementation for Hash Table data structure. It should work super fast. But the speed of executing get
method depends on the number of elements in the collection.
The more elements you have the slower will be search. But in case of hash table structure I think it's just micro optimization.
Conclusion:
If you work on micro-optimization and have enormous amount of elements in your collection then consider moving this computation to dedicated component property. Otherwise just live with it.