[英]How to sort an array of objects based on a the length of a nested array in javascript
我在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()方法完成此操作。 有什么建議?
提前致謝!
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;
});
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.