对JavaScript数组进行排序,以便NaN值始终在底部结束。

我们有一个包含String和数字混合数据类型的数组,我们必须编写一个对数组进行排序的排序函数,以便NaN值始终在底部结束。数组应包含所有常规数字,然后是字符串文字,然后是NaN数字。

我们知道NaN的数据类型是“数字”,因此我们无法检查NaN,如!number &&!string。此外,如果仅检查元素的重言式和虚假性,则空字符串也将满足NaN或未定义的条件。

检查NaN

那么我们如何检查NaN。NaN数字具有特殊的属性,即NaN不等于NaN,也就是说,对于JS中的任何其他值,无论是哪个值,值===值都会产生true,但NaN === NaN总是会产生false 。我们将使用这个事实对数组进行排序。

示例

const arr = [344, 'fd', NaN, '', 5, 'f',76, NaN, 76, NaN, 87, 89, 'fdf',
23, 'fgg', NaN, 765];
const sorter = (a, b) => {
   if(a !== a){
      return 1;
   }else if(b !== b){
      return -1;
   }
   return typeof a === 'number' ? -1 : 1;
};
arr.sort(sorter);
console.log(arr);

输出结果

控制台中的输出将为-

[
   765, 23, 89, 87,
   76, 76, 5, 344,
   'fd', '', 'f', 'fdf',
   'fgg', NaN, NaN, NaN,
   NaN
]