เราต้องเขียนฟังก์ชัน 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