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: ใช้ Map

วนลูปทั้งสองสตริงพร้อมกัน เก็บความถี่ตัวอักษรใน map ค่า -1 ถ้าอยู่ในสตริงแรก +1 ถ้าอยู่ในสตริงที่สอง ท้ายสุดถ้าทุก key รวมเป็น 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