JavaScript 數值和字母元素陣列排序(自然排序)


我們有一個數組,其中包含一些數字和一些字串。我們需要對陣列進行排序,以便數字按順序排列並放在每個字串之前,然後字串按字母順序排列。

例如 -

排序後的陣列

const arr = [1, 'fdf', 'afv', 6, 47, 7, 'svd', 'bdf', 9];

應該如下所示 -

[1, 6, 7, 9, 47, 'afv', 'bdf', 'fdf', 'svd']

因此,讓我們為此編寫程式碼 -

示例

const arr = [1, 'fdf', 'afv', 6, 47, 7, 'svd', 'bdf', 9];
const sorter = (a, b) => {
   if(typeof a === 'number' && typeof b === 'number'){
      return a - b;
   }else if(typeof a === 'number' && typeof b !== 'number'){
      return -1;
   }else if(typeof a !== 'number' && typeof b === 'number'){
      return 1;
   }else{
      return a > b ? 1 : -1;
   }
}
arr.sort(sorter);
console.log(arr);

輸出

控制檯中的輸出將為 -

[
   1, 6, 7,
   9, 47, 'afv',
   'bdf', 'fdf', 'svd'
]

理解程式碼 -

此程式碼的主要部分是排序器函式,我們知道回撥函式接收兩個引數,這兩個引數都是陣列的元素。

現在我們有四種可能性 -

  • a 和 b 都是數字 → 在這種情況下,我們將較小的數字放在較大的數字之前。

  • a 是數字但 b 是字串 → 在這種情況下,我們將數字 (a) 放在字串 (b) 之前,如問題中所述。

  • a 是字串但 b 是數字 → 在這種情況下,我們將 b 放在 a 之前。

  • a 和 b 都是字串 → 我們檢查按字母順序較小的字串,即排在前面的字串,並將其放在前面。

更新於: 2020-08-19

924 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告