Giả sử, chúng tôi bắt buộc phải viết một hàm String.prototype có ba đối số.
- Đối số đầu tiên là chuỗi sẽ được tìm kiếm cho các chuỗi con
- Đối số thứ hai là chuỗi, sự xuất hiện của Chuỗi được xóa
- Đối số thứ ba là một Số giả sử n, lần xuất hiện thứ n của chuỗi con được xóa khỏi chuỗi.
Hàm sẽ trả về chuỗi mới nếu việc xóa 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ụ
Sau đây là mã -
const str = 'jkdsttjkdsre'; const subStr = 'jk'; 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++; } } String.prototype.removeStr = removeStr; console.log(str.removeStr(subStr, num));
Trước hết, hàm này sẽ kiểm tra:Nếu thậm chí không có một lần xuất hiện nào của subStr thì 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 subStr trong chuỗi (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 cuối 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 lần xuất hiện bắt buộc, chúng tôi sẽ cắt lần 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 qua toàn bộ chuỗi, điều đó có nghĩa là không có đủ số lần xuất hiện của subStr 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ó như một hàm chuỗi.
Đầu ra
Điều này sẽ tạo ra kết quả sau trong bảng điều khiển -
jkdsttdsre