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

วิธีเปรียบเทียบอาร์เรย์สตริงสองชุด ไม่คำนึงถึงขนาดตัวพิมพ์และไม่ขึ้นกับการสั่งซื้อ JavaScript, ES6


เราจำเป็นต้องเขียนฟังก์ชันโดยพูดว่า isEqual() ซึ่งรับสองสตริงเป็นอาร์กิวเมนต์ และตรวจสอบว่าทั้งคู่มีอักขระเดียวกันโดยไม่ขึ้นกับลำดับและตัวพิมพ์หรือไม่

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

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

วิธีการ:1 การใช้อาร์เรย์

ในวิธีนี้ เราจะแปลงสตริงเป็นอาร์เรย์ ใช้เมธอด Array.prototype.sort() แปลงกลับเป็นสตริง และตรวจสอบความเท่าเทียมกัน

รหัสสำหรับสิ่งนี้จะเป็น −

ตัวอย่าง

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));

วิธีที่ 2:การใช้แผนที่

ในวิธีนี้เราวนซ้ำทั้งสองสตริงพร้อมกัน เก็บความถี่อักขระใน amap ด้วยค่าเช่นนี้ -

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

สุดท้าย หากคีย์ทั้งหมดรวมกันเป็น 0 เราก็สรุปได้ว่าสตริงนั้นไม่เหมือนกัน

รหัสสำหรับสิ่งนี้จะเป็น −

ตัวอย่าง

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));

ผลลัพธ์

ผลลัพธ์ในคอนโซลสำหรับทั้งคู่จะเป็น −

true