Computer >> Máy Tính >  >> Lập trình >> Javascript

Cách so sánh hai mảng chuỗi, không phân biệt chữ hoa chữ thường và độc lập về thứ tự JavaScript, ES6

Chúng tôi được yêu cầu viết một hàm, chẳng hạn như isEqual () nhận hai chuỗi làm đối số và kiểm tra xem chúng có chứa các ký tự giống nhau không, độc lập với thứ tự và trường hợp của chúng.

Ví dụ -

const first = 'Aavsg';
const second = 'VSAAg';
isEqual(first, second); //true

Phương pháp:1 Sử dụng mảng

Trong phương pháp này, chúng tôi chuyển đổi các chuỗi thành mảng, sử dụng phương thức Array.prototype.sort (), chuyển đổi chúng trở lại thành chuỗi và kiểm tra sự bằng nhau.

Mã cho điều này sẽ là -

Ví dụ

const first = 'Aavsg';
const second = 'VSAAg';
const stringSort = function(){
   return this.split("").sort().join("");
}
String.prototype.sort = stringSort;
const isEqual = (first, second) => first.toLowerCase().sort() ===
second.toLowerCase().sort();
console.log(isEqual(first, second));

Phương pháp 2:Sử dụng Bản đồ

Trong phương pháp này, chúng tôi lặp lại cả hai chuỗi cùng một lúc, lưu trữ tần số ký tự trong amap với các giá trị như thế này -

-1, if it appears in the first string,
+1, if it appears in the second string,

Cuối cùng, nếu tất cả các khóa bằng 0, chúng tôi kết luận rằng các chuỗi giống nhau, ngược lại thì không.

Mã cho điều này sẽ là -

Ví dụ

const first = 'Aavsg';
const second = 'VSAAg';
const isEqual = (first, second) => {
   if(first.length !== second.length){
      return false;
   }
   first = first.toLowerCase();
   second = second.toLowerCase();
   const map = {};
   for(ind in first){
      if(map[first[ind]]){
         map[first[ind]]++;
      }else{
         map[first[ind]] = 1;
      }
      if(map[second[ind]]){
         map[second[ind]]--;
      }else{
         map[second[ind]] = -1;
      }
   };
   return Object.values(map).reduce((acc, val) => val === 0 && acc, true);
};
console.log(isEqual(first, second));

Đầu ra

Đầu ra trong bảng điều khiển cho cả hai sẽ là -

true