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

ฟังก์ชันแยกตัวเลขที่ฝังอยู่ในสตริง - JavaScript

แตกต่างจาก parseInt() ที่หยุดอ่าน عندตัวอักษรแรกที่ไม่ใช่ตัวเลข ฟังก์ชันนี้ดึงตัวเลขทุกตัวในสตริงมารวมกัน

ตัวอย่าง

parseInt('454ffdg54hg53')     // 454 (หยุดที่ f)
parseInteger('454ffdg54hg53') // 4545453 (ดึงทุกตัวเลข)

ตัวอย่างโค้ด

const numStr = '454ffdg54hg53';

const parseInteger = numStr => {
  let res = 0;
  for (let i = 0; i < numStr.length; i++) {
    if (!+numStr[i]) continue; // ไม่ใช่ตัวเลข (0 จะถูกข้ามด้วย - bug)
    res = res * 10 + +numStr[i];
  }
  return res;
};

console.log(parseInteger(numStr));

บั๊กในโค้ดต้นฉบับ

!+numStr[i] จะเป็น true สำหรับ '0' เพราะ +'0' = 0 (falsy) → ตัวเลข 0 จะถูกข้าม

โค้ดที่ถูกต้อง

const parseInteger = numStr => {
  let res = 0;
  for (const ch of numStr) {
    if (ch >= '0' && ch <= '9') {
      res = res * 10 + (ch - '0');
    }
  }
  return res;
};

ผลลัพธ์

4545453