Reputation: 328
i get data named dataFromServer
from server in this format.
[
{"Name":"txtFirstName","Parent":"Alpha"},
{"Name":"txtLastName","Parent":"Alpha"},
{"Name":"btnSESearch","Parent":"Alpha"},
{"Name":"tblfootblSearchPat","Parent":"Bravo"},
{"Name":"btn-action-SPG-delete","Parent":"Bravo"}
]
and i want to change into this format
{
"Alpha":
[
{ "Name": "txtFirstName" },
{ "Name": "txtLastName" },
{ "Name": "btnSESearch" },
],
"Bravo":
[
{ "Name": "tblfootblSearchPat" },
{ "Name": "btn-action-SPG-delete" },
]
}
im doing this to get data in required format
var jsonObjLoop = '{';
var item = '"Alpha" :[';
$.each(dataFromServer, function (idx, val) {
item += '{"Name":"' + val.NAME + '"},';
});
item += ']}';
jsonObjLoop += item;
console.log(jsonObjLoop);
Upvotes: 0
Views: 87
Reputation: 386680
You could use the data array and iterate it. Then use an object for grouping and assign a new object to the group of the parent.
var data = [{ Name: "txtFirstName", Parent: "Alpha" }, { Name: "txtLastName", Parent: "Alpha" }, { Name: "btnSESearch", Parent: "Alpha" }, { Name: "tblfootblSearchPat", Parent: "Bravo" }, { Name: "btn-action-SPG-delete", Parent: "Bravo" }],
grouped = Object.create(null);
data.forEach(function (a) {
grouped[a.Parent] = grouped[a.Parent] || []; // checks if parent exist, if not create array
grouped[a.Parent].push({ Name: a.Name });
});
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Version with variable property to group on
function groupBy(array, key) {
var grouped = Object.create(null);
data.forEach(function (a) {
var o = Object.create(null);
Object.keys(a).forEach(function (k) {
if (k !== key) {
o[k] = a[k];
}
});
grouped[a[key]] = grouped[a[key]] || [];
grouped[a[key]].push(o);
});
return grouped;
}
var data = [{ Name: "txtFirstName", Parent: "Alpha" }, { Name: "txtLastName", Parent: "Alpha" }, { Name: "btnSESearch", Parent: "Alpha" }, { Name: "tblfootblSearchPat", Parent: "Bravo" }, { Name: "btn-action-SPG-delete", Parent: "Bravo" }];
console.log(groupBy(data, 'Parent'));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 1
Reputation: 27222
Try for in loop :
var dataFromServer = [
{"Name":"txtFirstName","Parent":"Alpha"},
{"Name":"txtLastName","Parent":"Alpha"},
{"Name":"btnSESearch","Parent":"Alpha"},
{"Name":"tblfootblSearchPat","Parent":"Bravo"},
{"Name":"btn-action-SPG-delete","Parent":"Bravo"}
];
var newObj = {};
for (var i in dataFromServer) {
newObj[dataFromServer[i].Parent] = newObj[dataFromServer[i].Parent] || [];
newObj[dataFromServer[i].Parent].push({ "Name": dataFromServer[i].Name});
}
console.log(newObj);
Upvotes: 0