Reputation: 247
I have some dynamically generated JSON data that I need to group by a specific number. So I have a way to generate the variable for the number, but need to group the items based on that number. This is the original JSON:
"items":[
{"name":"School","value":"sdf"},
{"name":"Year","value":"dsf"},
{"name":"GPA","value":"Sdfdsf"},
{"name":"School","value":"sdf"},
{"name":"Year","value":"dsf"},
{"name":"GPA","value":"Sdfdsf"},
]
I need it to group by every 3 items and format like this:
"items":[
"item":{
"School":"sdf",
"Year":"dsf",
"GPA":"Sdfdsf"
},
"item":{
"School":"sdf",
"Year":"dsf",
"GPA":"Sdfdsf"
}
]
Here is my current code:
var newData = "items": [];
jQuery('.dynamicRow input').each(function() {
var dName = jQuery(this).closest('input').attr('name');
var dValue = jQuery(this).closest('input').val();
var obj = {
name: dName,
value: dValue
};
newData.items.push(obj);
});
jQuery('#debug').text(JSON.stringify(newData));
Upvotes: 1
Views: 36
Reputation: 386660
You could use Array#reduce
and and insert an new object if i % 3
is zero.
Add the property at the last element of items.
var data = { "items": [{ "name": "School", "value": "sdf" }, { "name": "Year", "value": "dsf" }, { "name": "GPA", "value": "Sdfdsf" }, { "name": "School", "value": "sdf" }, { "name": "Year", "value": "dsf" }, { "name": "GPA", "value": "Sdfdsf" }] },
result = {
items: data.items.reduce(function (r, a, i) {
if (!(i % 3)) {
r.push({});
}
r[r.length - 1][a.name] = a.value;
return r;
}, [])
};
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 2