Skip to content

Commit 5364114

Browse files
feat: add Array.prototype.groupBy/groupByToMap (#4360)
Co-authored-by: Lukas Taegert-Atkinson <[email protected]>
1 parent 042933a commit 5364114

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

src/ast/nodes/shared/ArrayPrototype.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ export const ARRAY_PROTOTYPE = new ObjectEntity(
133133
flat: METHOD_DEOPTS_SELF_RETURNS_NEW_ARRAY,
134134
flatMap: METHOD_CALLS_ARG_DEOPTS_SELF_RETURNS_NEW_ARRAY,
135135
forEach: METHOD_CALLS_ARG_DEOPTS_SELF_RETURNS_UNKNOWN,
136+
groupBy: METHOD_CALLS_ARG_DEOPTS_SELF_RETURNS_UNKNOWN,
137+
groupByToMap: METHOD_CALLS_ARG_DEOPTS_SELF_RETURNS_UNKNOWN,
136138
includes: METHOD_RETURNS_BOOLEAN,
137139
indexOf: METHOD_RETURNS_NUMBER,
138140
join: METHOD_RETURNS_STRING,

test/form/samples/builtin-prototypes/array-expression/_expected.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ _flatMapArray[0].effect();
5555
const _forEachArray = [{ effect() {} }];
5656
_forEachArray.forEach(element => (element.effect = () => console.log(1)));
5757
_forEachArray[0].effect();
58+
[1].groupBy(() => console.log(1) || true);
59+
const _groupByArray = [{ effect() {} }];
60+
_groupByArray.groupBy((_, element) => (element.effect = () => console.log(1)));
61+
_groupByArray[0].effect();
62+
[1].groupByToMap(() => console.log(1) || true);
63+
const _groupByToMapArray = [{ effect() {} }];
64+
_groupByToMapArray.groupBy((_, element) => (element.effect = () => console.log(1)));
65+
_groupByToMapArray[0].effect();
5866
[1].map(() => console.log(1) || 1);
5967
const _mapArray = [{ effect() {} }];
6068
_mapArray.map(element => (element.effect = () => console.log(1)));

test/form/samples/builtin-prototypes/array-expression/main.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,18 @@ const _forEachArray = [{ effect() {} }];
104104
_forEachArray.forEach(element => (element.effect = () => console.log(1)));
105105
_forEachArray[0].effect();
106106

107+
const _groupBy = [1].groupBy(() => true);
108+
const _groupByEffect = [1].groupBy(() => console.log(1) || true);
109+
const _groupByArray = [{ effect() {} }];
110+
_groupByArray.groupBy((_, element) => (element.effect = () => console.log(1)));
111+
_groupByArray[0].effect();
112+
113+
const _groupByToMap = [1].groupByToMap(() => true);
114+
const _groupByToMapEffect = [1].groupByToMap(() => console.log(1) || true);
115+
const _groupByToMapArray = [{ effect() {} }];
116+
_groupByToMapArray.groupBy((_, element) => (element.effect = () => console.log(1)));
117+
_groupByToMapArray[0].effect();
118+
107119
const _map = [1].map(() => 1).join(',');
108120
const _mapEffect = [1].map(() => console.log(1) || 1);
109121
const _mapArray = [{ effect() {} }];

0 commit comments

Comments
 (0)