Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

สร้าง polyfill เพื่อแทนที่การเกิดสตริงที่ n JavaScript


สมมุติว่าเราได้สร้างฟังก์ชัน polyfill removeStr() ที่มีสามอาร์กิวเมนต์คือ −

  • subStr → เหตุการณ์ที่จะลบ String

  • num → เป็นจำนวน (num) ที่เกิดของ subStr จะถูกลบออกจากสตริง

ฟังก์ชันควรคืนค่าใหม่ หากการลบ subStr ออกจากสตริงสำเร็จ มิฉะนั้น ควรคืนค่า -1 ในทุกกรณี

ตัวอย่างเช่น −

const str = 'drsfgdrrtdr';
console.log(str.removeStr('dr', 3));

ผลลัพธ์ที่คาดหวัง -

'drsfgdrrt'

มาเขียนโค้ดสำหรับสิ่งนี้กัน −

ตัวอย่าง

const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function(subStr, num){
   if(!this.includes(subStr)){
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for(; ;end < this.length){
      if(this.substring(start, end) === subStr){
         occurences++;
      };
      if(occurences === num){
         return this.substring(0, start) + this.substring(end,
         this.length);
      };
      end++;
      start++;
   }
   return -1;
}
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num));

ผลลัพธ์

ผลลัพธ์สำหรับรหัสนี้ในคอนโซลจะเป็น -

drsfgrtdr

ทำความเข้าใจรหัส −

  • ฟังก์ชัน removeStr() จะตรวจสอบว่าไม่มี subStr() เกิดขึ้นแม้แต่ครั้งเดียวหรือไม่ จากนั้นเราจึงควรออกจากการทำงานและคืนค่า -1

  • จากนั้นจะใช้อัลกอริธึมหน้าต่างบานเลื่อนเพื่อบันทึกจำนวนครั้งของสตริงย่อย (ขนาดของหน้าต่างเท่ากับความยาวของ subStr)

  • เริ่มแรกเราเริ่มจากหน้าต่างซ้ายสุด จากนั้นเราค่อยเลื่อนหน้าต่างของเราไปจนสุดหน้าต่างถึงจุดสิ้นสุดของสตริงเดิม

  • หากในทางของเรา จำนวนครั้งที่เกิดขึ้นเท่ากับการเกิดขึ้นที่ต้องการ เราจะตัดทอนเหตุการณ์นั้นออกจากสตริงและส่งคืนสตริงใหม่ที่ได้รับ

  • หากเราวนซ้ำตลอดทั้งสตริง แสดงว่ามีการเกิด ofsubStr ในสตริงไม่เพียงพอ และในกรณีนี้ เราควรคืนค่า -1 และออกจากฟังก์ชัน

สุดท้าย เราเพิ่มคุณสมบัติ removeStr ให้กับ String.prototype เพื่อให้เราสามารถเรียกมันว่าเป็นฟังก์ชันสตริงได้