Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Sorting_Object - Fatal编程技术网

如何根据javascript中嵌套数组的长度对对象数组进行排序

如何根据javascript中嵌套数组的长度对对象数组进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我在javascript中有一个对象数组,每个对象都有一个数组: { category: [ { name: "Cat1", elements : [ { name: name, id: id } ] }, { name: "Cat2", elements : [ { name: name, id: id }, { name: name, id: id },

我在javascript中有一个对象数组,每个对象都有一个数组:

{
    category: [ 
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        },
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        }
    ]
}
我想根据嵌套数组“elements”中对象的数量对数组“category”进行排序

例如,排序后,上面的对象可能如下所示(降序):

我想知道是否可以使用javascript的sort()方法实现这一点。有什么建议吗


提前谢谢

sort方法接受一个函数,您可以在其中定义如何比较两个元素。这是我的建议

比较函数指定 定义排序顺序的函数。 如果省略,则对数组进行排序 词典编纂(在词典中) 顺序)根据字符串 每个元素的转换

如果提供了compareFunction,则将根据compare函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,则:

  • 如果比较函数(a,b)小于0,则将a排序为比b低的索引

  • 如果compareFunction(a,b)返回0,则保持a和b彼此不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如,至少可以追溯到2003年的Mozilla版本)都遵守这一点

  • 如果比较函数(a,b)大于0,则将b排序为比a低的索引

示例代码
var sorted\u categories=original.category.sort(函数(一个,另一个){
//a-b是
//元素相同时为0
//当a>b时>0

//错误。对于大小写
a.elements.length==b.elements.length
,必须返回0。缓存
元素的结果是有意义的。length
函数将被称为O(n*log n)次数,即很多。@Eli如何按降序排列?@Mrworldwide在return语句中切换一个和另一个,如so
return other.elements.length-one.elements.length;
{
    category: [ 
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        },
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        }

    ]
}
var sorted_categories = original.category.sort(function (one, other) {
   //a - b is 
   //   0 when elements are the same
   //  >0 when a > b
   //  <0 when a < b
   return one.elements.length - other.elements.length;
});
var category = [ 
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        },
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        }
];

function myAbcSort(a, b){
    if(a.elements.length > b.elements.length) {
        return -1;
    } else {
        return 1;
    }
}
category.sort(myAbcSort);