ภาพรวม
สมมติว่าเรามีอาร์เรย์สองอาร์เรย์ที่มีจำนวนอิลิเมนต์เท่ากัน เราต้องเขียนฟังก์ชันตรวจสอบว่าทั้งสองอาร์เรย์มีอิลิเมนต์เหมือนกันและปรากฏจำนวนครั้งเท่ากันหรือไม่
หากเงื่อนไขเป็นจริง ให้คืนค่า true มิฉะนั้นคืนค่า false
วิธีการแก้ปัญหา
สร้างสำเนาของอาร์เรย์ที่สอง แล้ววนลูปผ่านอาร์เรย์แรก ขณะวนลูป ให้ลบอิลิเมนต์ที่พบในอาร์เรย์แรกออกจากสำเนาอาร์เรย์ที่สอง หากพบอิลิเมนต์ที่ไม่มีในอาร์เรย์ที่สอง ให้คืนค่า false ทันที หากวนลูปจบสมบูรณ์ ให้คืนค่า true
ตัวอย่างโค้ด
const arr1 = [2, 5, 7, 4, 3, 3];
const arr2 = [3, 5, 7, 2, 3, 4];
const compareWithCount = (arr1, arr2) => {
if(arr1.length !== arr2.length) {
return false;
}
const copy2 = arr2.slice();
const areEqual = arr1.every(el => {
if(!copy2.includes(el)) {
return false;
}
copy2.splice(copy2.indexOf(el), 1);
return true;
});
return areEqual;
};
console.log(compareWithCount(arr1, arr2));
ผลลัพธ์ในคอนโซล
true