Shaybi
Shaybi

Reputation: 328

parsing a json object created using each loop

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

Answers (2)

Nina Scholz
Nina Scholz

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

Rohìt Jíndal
Rohìt Jíndal

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

Related Questions