JSFiddle - React, Tailwind, and code Playground
JavaScript
Object.prototype.GetHashCode = function () {
var s = this instanceof Object ? JSON.stringify(this) : this.toString();
var hash = 0;
if (s.length === 0) return hash;
for (var i = 0; i < s.length; ++i) {
hash = ((hash << 5) - hash) + s.charCodeAt(i);
}
return hash;
};
Number.prototype.GetHashCode = function () { return this.valueOf(); };
function GroupByToArray(a, keySelector, elementSelector, comparer)
{
elementSelector = elementSelector || function(e) { return e; };
comparer = comparer ||
{
Equals: function(a,b) { return a==b },
GetHashCode: function(e) { return e.GetHashCode(); }
};
var key, hashKey, reHashKey;
var hashs = {};
for (var i = 0, n = a.length; i < n; ++i)
{
reHashKey = undefined;
key = keySelector(a[i]);
hashKey = comparer.GetHashCode(key);
if (typeof hashs[hashKey] !== "undefined")
reHashKey = comparer.Equals(key, hashs[hashKey].Key) ? hashKey : hashKey + " " + i;
if (typeof reHashKey !== "undefined" && reHashKey !== hashKey)
hashKey = reHashKey;
hashs[hashKey] = hashs[hashKey] || { Key: key, Elements: [] };
hashs[hashKey].Elements.push(elementSelector(a[i]));
}
var keys = Object.keys(hashs);
var ret = [];
for (var i = 0, n = keys.length; i < n; ++i)
{
ret.push(hashs[keys[i]]);
}
return ret;
}
function GroupBy(a, keySelector, elementSelector, comparer)
{
elementSelector = elementSelector || function(e) { return e; };
comparer = comparer ||
{
Equals: function(a,b) { return a==b },
GetHashCode: function(e) { return e.GetHashCode(); }
};
var key, hashKey, reHashKey;
var hashs = {};
for (var i = 0, n = a.length; i < n; ++i)
{
reHashKey = undefined;
key = keySelector(a[i]);
hashKey =...