Tra*_*vis 5 javascript arrays sorting object
我在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 } ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想根据嵌套数组"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 } ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能使用javascript的sort()方法完成此操作.有什么建议?
提前致谢!
Eli*_*sky 16
该sort方法接受一个函数,您可以在其中定义如何比较两个元素.这是相关文档.
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;
});
Run Code Online (Sandbox Code Playgroud)