Skip to content

Commit

Permalink
[Refactor] use map.groupby
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Feb 9, 2024
1 parent dc7a4ff commit 7fcce58
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 87 deletions.
2 changes: 2 additions & 0 deletions .eslintrc
Expand Up @@ -14,9 +14,11 @@
"CreateDataPropertyOrThrow",
"Get",
"GetIntrinsic",
"IsArray",
"IsCallable",
"LengthOfArrayLike",
"OrdinaryObjectCreate",
"SameValue",
"ToObject",
"ToPropertyKey",
"ToString",
Expand Down
26 changes: 0 additions & 26 deletions aos/AddValueToKeyedGroup.js

This file was deleted.

60 changes: 7 additions & 53 deletions implementation.js
@@ -1,59 +1,13 @@
'use strict';

var GetIntrinsic = require('get-intrinsic');
var callBound = require('call-bind/callBound');

var Call = require('es-abstract/2023/Call');
var Get = require('es-abstract/2023/Get');
var IsCallable = require('es-abstract/2023/IsCallable');
var LengthOfArrayLike = require('es-abstract/2023/LengthOfArrayLike');
var ToObject = require('es-abstract/2023/ToObject');
var ToString = require('es-abstract/2023/ToString');

var $SyntaxError = require('es-errors/syntax');
var $TypeError = require('es-errors/type');
var $Map = GetIntrinsic('%Map%', true);
var $set = callBound('%Map.prototype.set%', true);

var forEach = require('es-abstract/helpers/forEach');

var AddValueToKeyedGroup = require('./aos/AddValueToKeyedGroup'); // TODO: replace with es-abstract 2024 implementation
var callBind = require('call-bind');
var groupBy = require('map.groupby');

module.exports = function groupToMap(callbackfn) {
var O = ToObject(this); // step 1
var len = LengthOfArrayLike(O); // step 2

if (!IsCallable(callbackfn)) {
throw new $TypeError('callbackfn must be a function'); // step 3
}

if (!$Map) {
throw new $SyntaxError('This environment does not support Maps');
}

var thisArg;
if (arguments.length > 1) {
thisArg = arguments[1];
}

var k = 0; // step 4
var groups = []; // step 5
while (k < len) { // step 6
var Pk = ToString(k);
var kValue = Get(O, Pk);
var key = Call(callbackfn, thisArg, [kValue, k, O]);
if (key === 0) {
key = 0; // step 6.d.
}
AddValueToKeyedGroup(groups, key, kValue);
k += 1;
}

var map = new $Map(); // Construct($Map); // step 7
forEach(groups, function (g) { // step 8
// var elements = CreateArrayFromList(g.Elements);
$set(map, g.Key, g.Elements);
var thisArg = arguments.length > 0 ? arguments[1] : this;
var cb = callBind(callbackfn, thisArg);
var self = this;
return groupBy(this, function (k, v) {
return cb(k, v, self);
});

return map; // step 9
};
14 changes: 6 additions & 8 deletions package.json
Expand Up @@ -46,6 +46,12 @@
"url": "https://github.com/es-shims/Array.prototype.groupToMap/issues"
},
"homepage": "https://github.com/es-shims/Array.prototype.groupToMap#readme",
"dependencies": {
"call-bind": "^1.0.5",
"define-properties": "^1.2.1",
"es-shim-unscopables": "^1.0.2",
"map.groupby": "^1.0.2"
},
"devDependencies": {
"@es-shims/api": "^2.4.2",
"@ljharb/eslint-config": "^21.1.0",
Expand All @@ -72,14 +78,6 @@
"backfillLimit": false,
"hideCredit": true
},
"dependencies": {
"call-bind": "^1.0.5",
"define-properties": "^1.2.1",
"es-abstract": "^1.22.3",
"es-errors": "^1.3.0",
"es-shim-unscopables": "^1.0.2",
"get-intrinsic": "^1.2.3"
},
"publishConfig": {
"ignore": [
".github/workflows"
Expand Down

0 comments on commit 7fcce58

Please sign in to comment.