I'm looking for a way of sorting a large data set similar to the one I provide bellow, without using large loops. I'm looking to sort the data of '439190' into multiple arrays containing only 1 of the 'colorid' in each array. I've been looking through all the filtering, mapping and reducing methods with no success, if anyone could point me in the right direction that would be great.
Raw Json output:
{ '439190':
[ { assetid: '9354886749',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886743',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886777',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886726',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354886755',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354886753',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354869964',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354869970',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354869963',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354886738',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354886773',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354886739',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354869966',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886767',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886727',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886763',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' },
{ assetid: '9354886722',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' },
{ assetid: '9354886762',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' } ],
Intended output (rough but hopefully you get the idea):
{ '439190':
[ [ { assetid: '9354886749',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886726',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354869964',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354886738',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354869966',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886763',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' } ],
[ { assetid: '9354886743',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886755',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354869970',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354886773',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354886767',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886722',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' } ],
[ { assetid: '9354886777',
classid: 439190,
colorid: '1650467837',
category: 'student',
favouritecolor: '439190-Red' },
{ assetid: '9354886753',
classid: 439190,
colorid: '1650746832',
category: 'student',
favouritecolor: '439190-Blue' },
{ assetid: '9354869963',
classid: 439190,
colorid: '1649236744',
category: 'student',
favouritecolor: '439190-Green' },
{ assetid: '9354886739',
classid: 439190,
colorid: '1651234125',
category: 'student',
favouritecolor: '439190-Yellow' },
{ assetid: '9354886727',
classid: 439190,
colorid: '1651726369',
category: 'student',
favouritecolor: '439190-Pink' },
{ assetid: '9354886762',
classid: 439190,
colorid: '1642929857',
category: 'student',
favouritecolor: '439190-Orange' } ] ],
My current code:
for(i in json){
test = Array.from(new Set(json[i].map(item => item.colorid)))
.map( colorid=> {
return {
"assetid":json[i].find(s => s.colorid=== colorid).assetid,
"classid":json[i].find(s => s.colorid=== colorid).classid,
"colorid":colorid,
"category":json[i].find(s => s.colorid=== colorid).category,
"favouritecolor":json[i].find(s => s.colorid=== colorid).favouritecolor
};
});
console.log(test);
}
it does filter the results to only contain unique colors and it retains all the key data, though it only returns one array. I've got to this point but I have been unsuccessful in finding an efficient way (not using multiple in-bedded loops) to get to the expected output shown above. Any help in improving my code or pointing me in the right direction would be appreciated :)