Giả sử, chúng tôi đã tạo một hàm polyfill removeStr () có ba đối số, đó là -
-
subStr → sự xuất hiện của Chuỗi sẽ bị loại bỏ
-
num → nó là một Số (num) lần xuất hiện của subStr sẽ được xóa khỏi chuỗi
Hàm sẽ trả về giá trị mới nếu việc loại bỏ subStr khỏi chuỗi thành công, nếu không, nó sẽ trả về -1 trong mọi trường hợp.
Ví dụ -
const str = 'drsfgdrrtdr'; console.log(str.removeStr('dr', 3));
Sản lượng mong đợi -
'drsfgdrrt'
Hãy viết mã cho việc này -
Ví dụ
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));
Đầu ra
Đầu ra cho mã này trong bảng điều khiển sẽ là -
drsfgrtdr
Hiểu mã -
-
Trước hết, hàm removeStr () sẽ kiểm tra xem thậm chí không có một lần xuất hiện nào của subStrt khi đó chúng ta nên thoát ra và trả về -1.
-
Sau đó, nó sử dụng thuật toán cửa sổ trượt để ghi lại số lần xuất hiện của chuỗi subStrin (kích thước của cửa sổ bằng chiều dài của subStr).
-
Ban đầu, chúng tôi bắt đầu từ cửa sổ ngoài cùng bên trái, sau đó chúng tôi tiếp tục trượt cửa sổ của mình cho đến khi kết thúc cửa sổ đến cuối chuỗi ban đầu.
-
Nếu theo cách của chúng tôi, số lần xuất hiện bằng với số lần xuất hiện bắt buộc, chúng tôi sẽ cắt sự xuất hiện đó khỏi chuỗi và trả về chuỗi mới do đó thu được.
-
Nếu chúng ta lặp lại toàn bộ chuỗi, điều đó có nghĩa là không có đủ số lần xuất hiện củasubStr trong chuỗi và trong trường hợp đó, chúng ta nên trả về -1 và thoát khỏi hàm
Cuối cùng, chúng tôi thêm thuộc tính removeStr vào String.prototype để chúng tôi có thể gọi nó là một hàm chuỗi.