Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีตรวจสอบความมีอยู่ของคำสำคัญ NaN ในอาร์เรย์ JavaScript


เรามีอาร์เรย์ขององค์ประกอบที่มีทั้งค่าจริงและเท็จ งานของเราคือเขียนฟังก์ชันที่คืนค่าอาร์เรย์พร้อมดัชนีขององค์ประกอบที่เป็น NaN ในอาร์เรย์ต้นฉบับ

NaN !== NaN

ชนิดข้อมูลของ NaN จริงๆ แล้วคือ number แม้ NaN จะเป็นค่า falsy แต่มีคุณสมบัติพิเศษที่ไม่มีชนิดข้อมูลหรือตัวแปรอื่นมี นั่นคือ นิพจน์ NaN === NaN ให้ false และเฉพาะกรณีของ NaN เท่านั้นที่เป็น false

ดังนั้น เราสามารถใช้พฤติกรรมนี้เพื่อประโยชน์และเลือกดัชนีค่า 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));

ใช้ isNaN() / Number.isNaN()

ฟังก์ชัน isNaN() คืนค่า true หรือ false ตามว่าค่าที่ให้มาเป็น NaN หรือสามารถบังคับให้เป็น NaN ได้ ในขณะที่ Number.isNaN() คืนค่า true ก็ต่อเมื่อค่าที่ให้มาเป็น NaN จริงๆ

ดังนั้น Number.isNaN() เป็นวิธีที่น่าเชื่อถือกว่า isNaN() ในการตรวจสอบ NaN ความแตกต่างของผลลัพธ์โค้ดแสดงด้านล่าง

ตัวอย่าง

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

โค้ดนี้เตรียมสองอาร์เรย์ หนึ่งใช้ Number.isNaN() และอีกอันใช้ isNaN()

ผลลัพธ์

ผลลัพธ์จะเป็น −

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

เราเห็นชัดว่า isNaN() คำนวณค่า non-NaN หลายค่าเป็น NaN นั่นคือเหตุผลที่ Number.isNaN() น่าเชื่อถือกว่า