Skip to content Skip to sidebar Skip to footer

Remove Duplicate On Json Iteration

Need to iterate over the below JSON object to produce a report (Tabular Report in table structure). Report will basically consist of List of stories & its related tasks state.

Solution 1:

You don't want to remove the duplicate entries, you want to merge them per-storyname.

var stories = {};
for (var i=0; i<QueryResults.Results.length; i++) {
    var result = QueryResults.Results[i],
        name = result.StoryName
    if (!(name in stories))
        stories[name] = {};
    stories[name][result.Name] = result.State;
}
/* console.log(stories):
{
    "FB Integration":{"Tech Design":"Completed","Development":"In-Progress","QA Testing":"Not Started","Front End Development":"Completed"},
    "Twitter Integration":{"Tech Design":"Not Started","Development":"Not Started"}
} */

Now you can build a table from that.

var keys = [];
for (var i=0; i<QueryResults.Results.length; i++) {
    var n = QueryResults.Results[i].Name;
    if (keys.indexOf(n) == -1)
         keys.push(n);
}
vardata = "<table><tr><th>Story Name</th>";
for (var i=0; i<keys.length; i++)
    data += "<th>"+keys[i]+"</th>";
data += "</tr>";
for (var storyname in stories) {
    data += "<tr><th>"+storyname+"</th>";
    for (var i=0; i<keys.length; i++)
        data += "<td>"+(stories[storyname][keys[i]] || "n.a.")+"</td>";
    data += "</tr>";
}
data += "</table>";

If you want to ensure a particular order or use a custom table header, you of course also could use a static keys array:

var keys = ["Tech Design","Front End Development","QA Testing","Development"];
var data = "<table><tr><td>StoryName</td><td>TechDesign</td><td>FED</td><td>QA</td><td>Development</td></tr>";
for (storyname in stories) {
…

Post a Comment for "Remove Duplicate On Json Iteration"