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

Cách kiểm tra sự tồn tại của NaN trong mảng JavaScript

Cho mảng chứa giá trị truthy và falsy. Viết hàm trả về mảng chỉ số của các phần tử là NaN trong mảng gốc.

NaN !== NaN

Kiểu dữ liệu NaN thực chất là number. Dù NaN là giá trị falsy, nó có tính chất đặc biệt: NaN === NaN luôn false. Chỉ có NaN mới có tính chất này. Ta dùng điều này để tìm chỉ số NaN.

Ví dụ 1: Dùng NaN !== NaN

const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN];

const pickNaN = (arr) => {
  return arr.reduce((acc, val, ind) => {
    if (val !== val) {
      acc.push(ind);
    }
    return acc;
  }, []);
};

console.log(pickNaN(arr));

Dùng isNaN() / Number.isNaN()

isNaN() trả về true nếu giá trị là NaN hoặc có thể ép thành NaN. Number.isNaN() chỉ trả về true nếu giá trị thực sự là NaN. Number.isNaN() tin cậy hơn.

Ví dụ 2: So sánh hai cách

const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN];

const pickNaN = (arr) => {
  return arr.reduce((acc, val, ind) => {
    if (Number.isNaN(val)) {
      acc.reliableWay.push(ind);
    }
    if (isNaN(val)) {
      acc.unreliableWay.push(ind);
    }
    return acc;
  }, {
    reliableWay: [],
    unreliableWay: []
  });
};

console.log(pickNaN(arr));

Kết quả

Đầu ra sẽ là:

{
  reliableWay: [ 4, 6, 9, 12 ],
  unreliableWay: [ 2, 3, 4, 6, 8, 9, 12]
}

Rõ ràng isNaN() tính sai nhiều giá trị không phải NaN. Do đó Number.isNaN() tin cậy hơn.