Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript循环中对对象进行分类_Javascript_Object_Categories - Fatal编程技术网

在JavaScript循环中对对象进行分类

在JavaScript循环中对对象进行分类,javascript,object,categories,Javascript,Object,Categories,我的目标如下: var object = [ { "category": "Apple", "color": "green" }, { "category": "Orange", "color": "Orange" }, { "category": "Apple", "color": "green" } ]; 我试图通过category迭代数据,因此以下内容将显示在列表中: 苹果 苹果 橙色的 下面是我尝试过的代码,但

我的目标如下:

var object = [
  {
    "category": "Apple",
    "color": "green"
  },
  {
    "category": "Orange",
    "color": "Orange"
  },
  {
    "category": "Apple",
    "color": "green"
  }
];
我试图通过category迭代数据,因此以下内容将显示在列表中:

  • 苹果
  • 苹果
  • 橙色的
下面是我尝试过的代码,但不幸的是,它按照它在对象中出现的顺序显示。任何想法都将不胜感激

    function makeUL(object) {
        var list = document.createElement('ul');
        for(var i = 0; i < object.length; i++) {
            var item = document.createElement('li');
            var a = document.createElement("a");
            a.textContent = object[i].category;
            a.setAttribute('href', 'http://test');
            item.appendChild(a);
            list.appendChild(item);
        }
        return list;
    }
函数makeUL(对象){
var list=document.createElement('ul');
对于(变量i=0;i
如果希望数组按字母顺序排序(描述顺序,从A到Z),必须先调用
.sort()
方法

function makeUL(object) {
    var list = document.createElement('ul');
    object.sort();
    for(var i = 0; i < object.length; i++) {
        var item = document.createElement('li');
        var a = document.createElement("a");
        while(i<length - 1 && object[i].category == object[i+1].category)
           a.textContent += object[i].color + ", ";
        a.setAttribute('href', 'http://test');
        item.appendChild(a);
        list.appendChild(item);
    }
    return list;
}
函数makeUL(对象){
var list=document.createElement('ul');
object.sort();
对于(变量i=0;i而(i您可以使用Array.sort


在for循环中使用数组之前对其进行排序

object.sort(function(a,b){
   return a.category > b.category
});
结果

[ { category: 'Apple', color: 'green' },
  { category: 'Apple', color: 'green' },
  { category: 'Orange', color: 'Orange' } ]

具有组更改的解决方案:

var object=[{“category”:“Apple”,“color”:“green”},{“category”:“Orange”,“color”:“Orange”},{“category”:“Apple”,“color”:“green”};
函数makeUL(对象){
var div=document.createElement('div');
sort(函数(a,b){返回a.category.localeCompare(b.category);});
object.forEach(函数(aa){
var a=document.createElement(“a”),
item=document.createElement('li'),
P
如果(aa.category!==此.最后一个){
p=document.createElement('p');
p、 innerHTML=aa.category;
儿童组(p);
this.list=document.createElement('ul');
div.appendChild(此列表);
this.last=aa.category;
}
a、 textContent=aa.category;
a、 setAttribute('href','http://test');
项目1(a);
此.list.appendChild(项);
},{last:undefined,list:undefined});
返回div;
}

document.body.appendChild(makeUL(object))
您是否希望对象
自动排序?有一种排序方法。.对数组进行排序是不够的。很抱歉,我应该清楚这一点。它们需要分类,以便我可以有标题,例如下面列出两个苹果的苹果标题和下面列出一个橙色的橙色标题。I在这种情况下,我仍然建议按类别对项目进行排序,但在使用新类别时也要添加标题。你能显示一个结果应该是什么的HTML模型文件吗?当然。感谢帮助:嗨,Jorel,排序是不够的,因为我需要对它们进行分类:例如,标题苹果和下面的两个苹果。所以我需要一种方法按类别筛选数据。已编辑:现在将检查下一个出现的类别是否与当前类别相同。需要首先对数组进行排序。这是一个很好的解决方案。非常感谢。感谢所有花时间回答的人。非常感谢。
object.sort(function(a, b) {
    return a.category > b.category;
});
[ { category: 'Apple', color: 'green' },
  { category: 'Apple', color: 'green' },
  { category: 'Orange', color: 'Orange' } ]