[英]Sort grouped array in asc/desc order
任何人都可以幫助按升序/降序對以下數組進行排序嗎? 該數組將根據每個分組中的最高數字進行排序(使用品牌分組)。 每組中的數字也將被排序:
original_array = [
{ brand: "Ford", number: "1", },
{ brand: "BMW", number: "1", },
{ brand: "BMW", number: "5", },
{ brand: "BMW", number: "20",},
{ brand: "Toyota", number: "10",}
];
desc_order = [
{ brand: "BMW", number: "20",},
{ brand: "BMW", number: "5", },
{ brand: "BMW", number: "1", },
{ brand: "Toyota", number: "10",},
{ brand: "Ford", number: "1", }
];
asc_order = [
{ brand: "Ford", number: "1", },
{ brand: "Toyota", number: "10",},
{ brand: "BMW", number: "1", },
{ brand: "BMW", number: "5", },
{ brand: "BMW", number: "20",}
];
由於輸出中品牌的順序取決於其組中的最大值,我建議首先創建一個列出每個品牌的最大數量的對象。
然后使用它進行排序,使用以下順序:
執行:
const array = [ { brand: "Ford", number: "1", }, { brand: "BMW", number: "1", }, { brand: "BMW", number: "5", }, { brand: "BMW", number: "20", }, { brand: "Toyota", number: "10", } ]; // First collect the maximum values per brand as an aggregate: const aggr = {}; for (let {brand, number} of array) { aggr[brand] = Math.max(number, aggr[brand] ?? number); } // Ascending array.sort((a, b) => aggr[a.brand] - aggr[b.brand] || a.brand.localeCompare(b.brand) || a.number - b.number); console.log(array); // Descending array.sort((a, b) => aggr[b.brand] - aggr[a.brand] || b.brand.localeCompare(a.brand) || b.number - a.number); console.log(array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.