From 146d2ee246cc136bde6bb2993d2d6d976ca66e9f Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 6 Dec 2022 15:39:27 +0000 Subject: [PATCH] refactor(compiler): replace `flatten` and `map` with `flatMap`. (#48378) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace custom `flatten` and `map` with native `flatMap` usage. Benchmark: | Test case name | Result | |---------------- |-------------------------------------------------------- | | flatten & map | flatten & map x 1,182 ops/sec ±2.18% (63 runs sampled) | | flatMap | flatMap x 6,011 ops/sec ±0.91% (35 runs sampled) | The fact that `flatMap` is faster is also highlighted in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap PR Close #48378 --- packages/compiler/src/render3/view/template.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/compiler/src/render3/view/template.ts b/packages/compiler/src/render3/view/template.ts index 9e224891de6..b4fc5e90676 100644 --- a/packages/compiler/src/render3/view/template.ts +++ b/packages/compiler/src/render3/view/template.ts @@ -1393,7 +1393,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver return o.TYPED_NULL_EXPR; } - const refsParam = flatten(references.map(reference => { + const refsParam = references.flatMap(reference => { const slot = this.allocateDataSlot(); // Generate the update temporary. const variableName = this._bindingScope.freshReferenceName(); @@ -1410,8 +1410,9 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver const refExpr = lhs.set(o.importExpr(R3.reference).callFn([o.literal(slot)])); return nextContextStmt.concat(refExpr.toConstDecl()); }, true); + return [reference.name, reference.value]; - })); + }); return asLiteral(refsParam); } @@ -2360,10 +2361,3 @@ export interface ParsedTemplate { */ commentNodes?: t.Comment[]; } - -function flatten(list: Array): T[] { - return list.reduce((flat: any[], item: T|T[]): T[] => { - const flatItem = Array.isArray(item) ? flatten(item) : item; - return (flat).concat(flatItem); - }, []); -}