Reputation: 48933
Based on this JSON array below I need to split it into separate JSON arrays based on the category
property on each item.
So all items with the category property set to person
will be plucked out and into a new variable holding a new JSON array with just the category
items.
I then need to do this for each category found using JavaScript or jQuery.
The sample data below has 3 different category values:
code:
var mock_data_types = [
{
"type":"first_name",
"name":"First Name1",
"description": "Random generated First Name",
"example":"Jason",
"category":"person"
},
{
"type": "last_name",
"name": "Last Name2",
"description": "Random generated Last Name",
"example": "Davis",
"category": "address"
},
{
"type": "domain",
"name": "Domain Name3",
"description": "Random generated WWW Domain Name",
"example": "google.com",
"category": "it"
},
{
"type": "Gender",
"name": "Gender4",
"description": "Random generated Gender Type",
"example": "Female",
"category": "person"
},
{
"type": "first_name",
"name": "First Name5",
"description": "Random generated First Name",
"example": "Jason",
"category": "person"
},
{
"type": "last_name",
"name": "Last Name6",
"description": "Random generated Last Name",
"example": "Davis",
"category": "address"
},
{
"type": "domain",
"name": "Domain Name7",
"description": "Random generated WWW Domain Name",
"example": "google.com",
"category": "person"
},
{
"type": "Gender",
"name": "Gender8",
"description": "Random generated Gender Type",
"example": "Female",
"category": "address"
},
{
"type": "first_name",
"name": "First Name9",
"description": "Random generated First Name",
"example": "Jason",
"category": "it"
},
{
"type": "last_name",
"name": "Last Name10",
"description": "Random generated Last Name",
"example": "Davis",
"category": "person"
},
{
"type": "domain",
"name": "Domain Name11",
"description": "Random generated WWW Domain Name",
"example": "google.com",
"category": "it"
},
{
"type": "Gender",
"name": "Gender12",
"description": "Random generated Gender Type",
"example": "Female",
"category": "person"
},
{
"type": "first_name",
"name": "First Name13",
"description": "Random generated First Name",
"example": "Jason",
"category": "address"
},
{
"type": "last_name",
"name": "Last Name14",
"description": "Random generated Last Name",
"example": "Davis",
"category": "person"
},
{
"type": "domain",
"name": "Domain Name15",
"description": "Random generated WWW Domain Name",
"example": "google.com",
"category": "it"
},
{
"type": "Gender",
"name": "Gender16",
"description": "Random generated Gender Type",
"example": "Female",
"category": "person"
},
];
Upvotes: 0
Views: 696
Reputation: 2671
If you are not adverse to using a library, I would tell you to get underscore. Using the where function you could do something like below to accomplish your results.
_.where(mock_data_types, {'category': 'person'});
I would also like you can get more complex with the plucking of the data and add as many properties as you like such as:
_.where(mock_data_types, {'category': 'person', 'type': 'first_name'});
Upvotes: 0
Reputation: 576
this is a simple javascript solution without using any libraries
var dt = {};
for(var a=0;a<mock_data_types.length;a++) {
if(dt[mock_data_types[a].category]){
dt[mock_data_types[a].category].push(mock_data_types[a])
}else{
dt[mock_data_types[a].category] = [mock_data_types[a]];
}
}
Upvotes: 2
Reputation: 164796
This is a pretty easy job for Array.prototype.reduce
var mock_data_types = [{"type":"first_name","name":"First Name1","description":"Random generated First Name","example":"Jason","category":"person"},{"type":"last_name","name":"Last Name2","description":"Random generated Last Name","example":"Davis","category":"address"},{"type":"domain","name":"Domain Name3","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender4","description":"Random generated Gender Type","example":"Female","category":"person"},{"type":"first_name","name":"First Name5","description":"Random generated First Name","example":"Jason","category":"person"},{"type":"last_name","name":"Last Name6","description":"Random generated Last Name","example":"Davis","category":"address"},{"type":"domain","name":"Domain Name7","description":"Random generated WWW Domain Name","example":"google.com","category":"person"},{"type":"Gender","name":"Gender8","description":"Random generated Gender Type","example":"Female","category":"address"},{"type":"first_name","name":"First Name9","description":"Random generated First Name","example":"Jason","category":"it"},{"type":"last_name","name":"Last Name10","description":"Random generated Last Name","example":"Davis","category":"person"},{"type":"domain","name":"Domain Name11","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender12","description":"Random generated Gender Type","example":"Female","category":"person"},{"type":"first_name","name":"First Name13","description":"Random generated First Name","example":"Jason","category":"address"},{"type":"last_name","name":"Last Name14","description":"Random generated Last Name","example":"Davis","category":"person"},{"type":"domain","name":"Domain Name15","description":"Random generated WWW Domain Name","example":"google.com","category":"it"},{"type":"Gender","name":"Gender16","description":"Random generated Gender Type","example":"Female","category":"person"}];
var categories = mock_data_types.reduce((categories, dataType) => {
categories[dataType.category] = categories[dataType.category] || [];
categories[dataType.category].push(dataType);
return categories;
}, {});
document.write('<pre>' + JSON.stringify(categories, null, ' ') + '</pre>');
Upvotes: 2