簡體   English   中英

按升序/降序對分組數組進行排序

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

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