Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Sắp xếp mảng JavaScript để giá trị NaN luôn ở cuối

Chúng ta có mảng chứa kiểu dữ liệu String và Number lẫn nhau, cần viết hàm sắp xếp sao cho giá trị NaN luôn ở cuối. Mảng sẽ chứa số thông thường trước, sau đó chuỗi, cuối cùng NaN.

Kiểu dữ liệu của NaN là "number", nên không thể kiểm tra bằng !number && !string. Nếu chỉ kiểm tra truthy/falsy thì chuỗi rỗng cũng thỏa mãn điều kiện như NaN hay undefined.

Kiểm tra NaN

NaN có tính chất đặc biệt: NaN !== NaN (luôn false). Với bất kỳ giá trị nào khác, value === value luôn true. Chúng ta dùng tính chất này để sắp xếp.

Ví dụ

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);

Kết quả

Đầu ra trong console sẽ là:

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