簡體   English   中英

如何根據javascript中嵌套數組的長度對對象數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM