使用javascript根据值将项目分组到两个级别

使用javascript根据值将项目分组到两个级别,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,我有以下情况: 我获取项目信息的JSON数据。我解析它并在HTML中使用它。 数据的格式如下: {"classification": "books","category": "comics","Code": "ITBCBAT08","Title": ...}, ... 但是,现在我需要根据各自的分类和类别组合将它们放在部分下 在分析结果时,我尝试在一个数组中获取一组唯一的分类,并在另一个数组中获取类别: if ( $.inArray(this.classification, rO.classi

我有以下情况:

我获取项目信息的JSON数据。我解析它并在HTML中使用它。
数据的格式如下:

{"classification": "books","category": "comics","Code": "ITBCBAT08","Title": ...}, ...
但是,现在我需要根据各自的分类和类别组合将它们放在部分下

在分析结果时,我尝试在一个数组中获取一组唯一的分类,并在另一个数组中获取类别:

if ( $.inArray(this.classification, rO.classification) == -1 )
     rO.classification.push(this.classification);

if ( $.inArray(this.category, rO.category) == -1 )
     rO.category.push(this.category);
在打印HTML时,我检查了上面的内容,但是无法检查组合

下面是上面的一个例子:

输出将类似于

<div class="ClassificationName">

    <h2>Classification Name</h2>

    <div class="categoryName">
       <h3>Category Name</h3>
           <!-- Items that have the above Classification and Category -->
    </div>

    <div class="categoryName2">
       <h3>Category Name2</h3>
           <!-- Items that have the above Classification and Category2 -->
    </div>

</div>
...

分类名称
类别名称
类别名称2
...
有人能帮我做这个吗

谢谢。

我会给你一个算法

  • 首先,您必须对对象列表进行排序

  • 有一个名为PreviousClassification的变量

  • 遍历对象

  • 4.如果
    以前的分类
    为空或等于
    当前分类
    。然后只需添加类别名称,然后将
    currentClassification
    关联到
    previousClassification

  • 如果没有,请关闭
    分类
    Div,并为新的
    分类
    Div打开一个新的
    分类
    Div

  • 如果索引值等于length-1,则关闭
    classificationDiv


  • 我认为有两种可能的解决方法:

    1:将数据传递一次,并将其组织在多维对象中,并在其上循环以输出结果

    2:对于每个项目,创建分类和类别(如果还没有),并将其附加到DOM中,然后将项目名称附加到特定位置。但这将是大量的DOM操作,而且效率可能更低

    下面是一个可能的解决方案,首先重新格式化数据(1)

    小提琴:

    sO=[
    {
    “分类”:“书籍”,
    “类别”:“漫画”,
    “代码”:“ITBCBAT08”,
    “头衔”:“黑暗骑士”
    },
    {
    “分类”:“CD”,
    “类别”:“漫画”,
    “代码”:“ITCCCSUP02”,
    “头衔”:“超人”
    },
    {
    “分类”:“书籍”,
    “类别”:“文学”,
    “代码”:“ITBLII01”,
    “标题”:“杀死一只知更鸟”
    }
    ];
    //结果=$.parseJSON(sO);
    结果=sO;
    var html=”“,data={},cls,cat;
    for(sO中的var i){
    cls=sO[i].分类;
    cat=sO[i]。类别;
    if(数据类型[cls]=“未定义”){
    数据[cls]=[];
    }
    if(数据类型[cls][cat]=“未定义”){
    数据[cls][cat]=[];
    }
    数据[cls][cat].push(sO[i]);
    }
    for(数据中的var cls){
    html+=“”;
    html+=“”+cls+“”;
    对于(var cat in数据[cls]){
    html+=“”+cat+“”
    对于(数据[cls][cat]中的var项目){
    html+=“”+数据[cls][cat][item]。标题+”

    ”; } } html+=“”; html+=“”; } $('#test').append(html);
    改进点:

  • 在for in循环中使用hasOwnProperty
  • sO = [
            {
                "classification": "books",
                "category": "comics",
                "Code": "ITBCBAT08",
                "Title": "Dark Knight"
            },
            {
                "classification": "cds",
                "category": "comics",
                "Code": "ITCCCSUP02",
                "Title": "Superman"
            },
            {
                "classification": "books",
                "category": "literature",
                "Code": "ITBLII01",
                "Title": "To Kill a Mockingbird"
            }
        ];
    
         // Result = $.parseJSON(sO);
         Result = sO;
    
    var html = "", data = {}, cls, cat;
    
    for(var i in sO) {
        cls = sO[i].classification;
        cat = sO[i].category;
    
        if(typeof data[cls] === "undefined") {
            data[cls] = [];
        }
    
        if(typeof data[cls][cat] === "undefined") {
            data[cls][cat] = [];
        }
    
        data[cls][cat].push(sO[i]);
    }
    
    for(var cls in data) {
        html += "<div class=\"main\" style='display:block' >";
        html += "<h2>" + cls  + "</h2>";
    
        for(var cat in data[cls]) {
            html += "<h3>" + cat  + "</h3>"
    
            for(var item in data[cls][cat]) {
                html += "<p>" + data[cls][cat][item].Title + "</p>";   
            }
        }
    
        html += "</div>";
        html += "<div class=\"clr\"></div>";
    }
    $('#test').append(html);