我在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: [
{ 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 } ]
}
]
}
我想知道是否可以使用javascript的sort()方法完成此操作。有什么建议吗?
提前致谢!
答案 0 :(得分:15)
sort
方法接受一个函数,您可以在其中定义如何比较两个元素。这是relevant documentation。
compareFunction 指定一个 定义排序顺序的函数。 如果省略,则对数组进行排序 按字典顺序(在字典中 顺序)根据字符串 转换每个元素。
如果提供compareFunction,则根据compare函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:
如果compareFunction(a,b)小于0,则将a排序为低于b的索引。
如果compareFunction(a,b)返回0,则保持a和b相对于彼此不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
如果compareFunction(a,b)大于0,则将b排序为低于a的索引。
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;
});
答案 1 :(得分:-1)
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);