ภาพรวม
บทความนี้แสดงวิธีเปรียบเทียบอาร์เรย์ 2 มิติ (2D Arrays) สองตัว ว่ามีค่าเท่ากันทุกตำแหน่งหรือไม่ โดยต้องมีจำนวนแถวและคอลัมน์เท่ากัน และค่าทุกตำแหน่ง [i][j] ต้องเท่ากัน
การนำไปใช้
const arr1 = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3]
];
const arr2 = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3]
];
const areEqual = (first, second) => {
// ตรวจสอบจำนวนแถว
if (first.length !== second.length) return false;
for (let i = 0; i < first.length; i++) {
// ตรวจสอบจำนวนคอลัมน์ในแต่ละแถว
if (first[i].length !== second[i].length) return false;
for (let j = 0; j < first[i].length; j++) {
if (first[i][j] !== second[i][j]) return false;
}
}
return true;
};
console.log(areEqual(arr1, arr2)); // true
ผลลัพธ์
true
วิธีการทันสมัย (ES6+)
// ใช้ JSON.stringify (ง่ายแต่ไม่เหมาะกับออบเจกต์ซับซ้อน)
const areEqualJSON = (a, b) => JSON.stringify(a) === JSON.stringify(b);
// ใช้ every() และ array equality
const areEqualModern = (a, b) =>
a.length === b.length &&
a.every((row, i) => row.length === b[i].length && row.every((val, j) => val === b[i][j]));
// ใช้ Lodash (ถ้ามี library)
const areEqualLodash = (a, b) => _.isEqual(a, b);
กรณีพิเศษที่ควรพิจารณา
- อาร์เรย์巢狀ลึกกว่า 2 มิติ
- ออบเจกต์ภายในอาร์เรย์ (ต้องใช้ Deep Comparison)
- ค่า NaN (NaN !== NaN ใน JavaScript)
- Sparse Arrays (ช่องว่างในอาร์เรย์)
เวอร์ชันรองรับ NaN และ Sparse Arrays
const areEqualRobust = (a, b) => {
if (a.length !== b.length) return false;
return a.every((row, i) => {
if (row.length !== b[i].length) return false;
return row.every((val, j) => {
const other = b[i][j];
// จัดการ NaN
if (Number.isNaN(val) && Number.isNaN(other)) return true;
return val === other;
});
});
};