Kết quả đoạn code không như mong đợi

Ai xem giúp bị sai chỗ nào không, kết quả không như mong đợi

let string = 'hello$@#!%%'
const specialCharacters = [
    "~", "`", "!", "@", 
    "#", "$", "%", "^", 
    "&", "*", "(", ")", 
    "-", "_", "+", "=", 
    "{", "}", "[", "]", 
    "|", "\\", "/", ":", 
    ";", "\"", "'", "<", 
    ">", "?"
  ]
  let result = string
  
  specialCharacters.forEach(char => {
    for(let i of string){
      result = string.replace(char, '')
    }
  })
  console.log(result)

in ra vẫn là hello$@#!%%

Bạn thử in string và result ra xem có điều gì xảy ra.

3 Likes

Dưới đây là mình sửa nhanh:

let string = 'hello$@#!%%'
const specialCharacters = [
    "~", "`", "!", "@", 
    "#", "$", "%", "^", 
    "&", "*", "(", ")", 
    "-", "_", "+", "=", 
    "{", "}", "[", "]", 
    "|", "\\", "/", ":", 
    ";", "\"", "'", "<", 
    ">", "?"
  ]
  let result = string
  
  specialCharacters.forEach(char => {
    for(let i of string){
      result = result.replace(char, '')
    }
  })
  console.log(result)

Thấy khác biệt không?
Nhưng cách này chả tối ưu tí nào.

5 Likes

Dùng regex thôi bạn :slight_smile:

3 Likes

Tại sao chỉ thay đổi string thành result mà đã có khác biệt rồi, result bằng string mà

result ban đầu bằng string nhưng result không phải là string. Method replace chỉ trả về kết quả chứ không thay đổi cái gốc. Ở đoạn code của bạn thì bạn chỉ đang thay đi thay lại cái chuỗi string ban đầu thôi.

Ngoài ra thì bạn nên dùng regex cho gọn.

2 Likes

Hiểu sai vấn đề rồi đấy bạn.

  1. Chuỗi bất biến, phương thức replace() trả về chuỗi mới, không phải chuỗi gốc đã được sửa.
  2. Biến result tham chiếu đến chuỗi mới mỗi khi gán lại.

Và… result nhận kết quả cuối cùng của dòng result = string.replace(...).
Kết quả cuối chính là lần lặp cuối của mảng kí tự đặc biệt tương đương với:

result = "hello$@#!%%".replace("?", '')

Bạn nên tìm hiều về RegEx như @rogp10 đã chỉ. Biết RegEx có lợi nhiều đấy.

2 Likes

Mình xin đóng góp cách dùng regex:

string = "he$#%^l.,;'_lo&*#$K~i`@#t>//t=='y<";
string = string.replace(/\W|\_/g, "");
console.log(string);

Bạn có thể tham khảo trang https://regex101.com/#javascript để hiểu hơn về regex nhé.

4 Likes

This topic was automatically closed after 23 hours. New replies are no longer allowed.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?