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 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告