如何根据javascript中嵌套数组的长度对对象数组进行排序
我在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 },
{
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语句中切换一个和另一个,如soreturn 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);