使用javascript根据值将项目分组到两个级别
我有以下情况: 我获取项目信息的JSON数据。我解析它并在HTML中使用它。使用javascript根据值将项目分组到两个级别,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,我有以下情况: 我获取项目信息的JSON数据。我解析它并在HTML中使用它。 数据的格式如下: {"classification": "books","category": "comics","Code": "ITBCBAT08","Title": ...}, ... 但是,现在我需要根据各自的分类和类别组合将它们放在部分下 在分析结果时,我尝试在一个数组中获取一组唯一的分类,并在另一个数组中获取类别: if ( $.inArray(this.classification, rO.classi
数据的格式如下:
{"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
...
有人能帮我做这个吗
谢谢。我会给你一个算法
以前的分类
为空或等于当前分类
。然后只需添加类别名称,然后将currentClassification
关联到previousClassification
分类
Div,并为新的分类
Div打开一个新的分类
DivclassificationDiv
我认为有两种可能的解决方法: 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);
改进点:
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);