删除重复的JSON迭代 [英] Remove duplicate on JSON iteration

查看:180
本文介绍了删除重复的JSON迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要遍历下面的JSON对象来生成一个报表(表结构中的表格报表)。

报表将基本上由报表和报表组成。

  QueryResults = {
Results:[
{
名称:Tech Design,
State:已完成,
StoryName:FB集成
},
{
:开发,
状态:进行中,
StoryName:FB集成
},
{
Name :QA测试,
状态:未开始,
StoryName:FB集成
},
{
Name 前端开发,
状态:已完成,
StoryName:FB集成
},
{
Name Tech Design,
State:Not Started,
StoryName:Twitter集成
},
{
Name:Development ,
国家:不是S tarted,
StoryName:Twitter集成
}
]
}

HTML填充:

 < table> 
< tr>
< td> StoryName< / td>
< td> TechDesign< / td>
< td> FED< / td>
< td> QA< / td>
< td>开发< / td>
< / tr>
< tr>
< td> FB整合< / td>
< td>已完成< / td>
< td>已完成< / td>
< td>进行中< / td>
< td>进行中< / td>
< / tr>
......
......
< / table>

脚本:

  for(var i = 0; i< QueryResults.Results.length; i ++){
data + ='< tr>< td> + QueryResults.Results [i] .StoryName + '< / td>< td>'+ QueryResults.Results [i] .State +'< / td>< / tr>';
}

//它会列出所有的故事名称,即多个相同的故事名称

请为我提供指示信息,以便在遍历JSON的同时删除重复的故事名称,并在其他列中填充相应的详细信息。

解决方案

  

> var stories = {};
for(var i = 0; i< QueryResults.Results.length; i ++){
var result = QueryResults.Results [i],
name = result.StoryName
if (!(故事中的名字))
stories [name] = {};
stories [name] [result.Name] = result.State;
}
/ * console.log(故事):
{
FB集成:{Tech Design:Completed,Development:正在进行,未开始,前端开发,已完成},
Twitter集成:{Tech Design:未开始,开发:未开始}
} * /

现在您可以从中创建表格。 >

  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);
}
var data =< table>< tr>< th> Story Name< / th>; (var i = 0; i data + =th+ keys [i] +< th>的
;
data + =< / tr>;
for(var storyname in stories){
data + =< tr> th+ storyname +< th>;
for(var i = 0; i data + =< td>+(stories [storyname] [keys [i]] ||na) + < / TD> 中;
data + =< / tr>;
}
data + =< / table>;

如果您想要确保特定的顺序或使用自定义表头,您当然也可以使用一个静态数组:

  var keys = [Tech Design ,前端开发,质量保证测试,开发]; 
var data =< table>< tr>< td> StoryName< / td>< td> TechDesign< / td>< td> FED< / td> TD>< TD>开发与LT; / TD>< / TR>中;
for(storyname in stories){
...


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.

QueryResults = {
    "Results": [
        {
            "Name" : "Tech Design",
            "State" : "Completed",
            "StoryName" : "FB Integration"
        },
        {
            "Name" : "Development",
            "State" : "In-Progress",
            "StoryName" : "FB Integration"
        },
        {
            "Name" : "QA Testing",
            "State" : "Not Started",
            "StoryName" : "FB Integration"
        },
        {
            "Name" : "Front End Development",
            "State" : "Completed",
            "StoryName" : "FB Integration"
        },
        {
            "Name" : "Tech Design",
            "State" : "Not Started",
            "StoryName" : "Twitter Integration"
        },
        {
            "Name" : "Development",
            "State" : "Not Started",
            "StoryName" : "Twitter Integration"
        }
    ]
}

HTML to populate:

<table>
    <tr>
        <td>StoryName</td>
        <td>TechDesign</td>
        <td>FED</td>
        <td>QA</td>
        <td>Development</td>
    </tr>
    <tr>
        <td>FB Integration</td>
        <td>Completed</td>
        <td>Completed</td>
        <td>In-Progress</td>
        <td>In-Progress</td>
    </tr>
    ......
    ......
</table>

Script :

for(var i=0; i < QueryResults.Results.length; i++) {
  data+= '<tr><td>' + QueryResults.Results[i].StoryName + '</td><td>' + QueryResults.Results[i].State + '</td></tr>'; 
}

// it will list down all the story name i.e. same story name multiple times

Please provide me pointers to remove the duplicate story names while iterating over the JSON and populate the respective details in other columns.

解决方案

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);
}
var data = "<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) {
…

这篇关于删除重复的JSON迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆