From 37e395c0e3336168fd11cdd4338e7a58d45e23c3 Mon Sep 17 00:00:00 2001 From: imxyy_soope_ Date: Mon, 16 Feb 2026 22:31:31 +0800 Subject: [PATCH] optimize: builtins.intersectAttrs --- nix-js/runtime-ts/src/builtins/attrs.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/nix-js/runtime-ts/src/builtins/attrs.ts b/nix-js/runtime-ts/src/builtins/attrs.ts index 20789d1..c4eb38f 100644 --- a/nix-js/runtime-ts/src/builtins/attrs.ts +++ b/nix-js/runtime-ts/src/builtins/attrs.ts @@ -72,9 +72,21 @@ export const intersectAttrs = const f1 = forceAttrs(e1); const f2 = forceAttrs(e2); const attrs: NixAttrs = {}; - for (const key of Object.keys(f2)) { - if (Object.hasOwn(f1, key)) { - attrs[key] = f2[key]; + const k1 = Object.keys(f1); + const k2 = Object.keys(f2); + if (k1.length < k2.length) { + for (let i = 0; i < k1.length; i++) { + const key = k1[i]; + if (key in f2) { + attrs[key] = f2[key]; + } + } + } else { + for (let i = 0; i < k2.length; i++) { + const key = k2[i]; + if (key in f1) { + attrs[key] = f2[key]; + } } } return attrs;