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
]