Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การตรวจสอบความเท่ากันของอาร์เรย์ 2 มิติใน JavaScript

ภาพรวม

บทความนี้แสดงวิธีเปรียบเทียบอาร์เรย์ 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;
    });
  });
};