JSFiddle - React, Tailwind, and code Playground
by Glutamat
JavaScript
//test
var arrComplex = [
{ N: { Value: 10 }, Name: "Foo" },
{ N: { Value: 10 }, Name: "Bar" },
{ N: { Value: 20 }, Name: "Foo" },
{ N: { Value: 20 }, Name: "Bar" }
];
function groupBy (arr,key,ele) {
var undefined, curK,curE,
resultObj = {},
resultArr=[];
key = key.split (".");
ele = ele.split (".");
for (var h=0; h < arr.length; h++) {
curK = curE = arr [h];
for (var i=0,len=Math.max (key.length,ele.length);i<len;i++) {
curK=curK[key [i]]||curK;
curE=curE[ele [i]]||curE;
}
if (resultObj[curK] === undefined) {
resultObj [curK] = {
Elements : [curE],
key: curK
}
} else {
resultObj [curK].Elements.push (curE);
}
}
for (var k in resultObj) {
resultArr.push (resultObj [k]);
}
return resultArr;
}
function groupBy2 (arr,key,ele) {
var undefined,curK,curE,
resultObj = {},
resultArr=[];
for (var h=0; h < arr.length; h++) {
curK = curE = arr [h];
for (var i=0,len=Math.max (key.length,ele.length);i<len;i++) {
curK=curK[key [i]]||curK;
curE=curE[ele [i]]||curE;
}
if (resultObj[curK] === undefined) {
resultObj [curK] = {
Elements : [curE],
key: curK
}
} else {
resultObj [curK].Elements.push (curE);
}
}
for (var k in resultObj) {
resultArr.push (resultObj [k]);
}
return resultArr;
}
function groupBy3 (arr,key,ele) {
var undefined,curK,curE,
resultObj = {};
key = key.split (".");
ele = ele.split (".");
for (var h=0; h < arr.length; h++) {
curK = curE = arr [h];
for (var i=0,len=Math.max (key.length,ele.length);i<len;i++) {
curK=curK[key [i]]||curK;
curE=curE[ele [i]]||curE;
...