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

ตรวจสอบว่าทุก property ในอ็อบเจกต์มีค่าเท่ากันแบบ Recursive ใน JavaScript

สมมติว่าเราต้องเขียนฟังก์ชัน isSame() ที่รับอ็อบเจกต์ซ้อนและคืนค่า boolean ตามข้อเท็จจริงว่าทุก key มีค่าเท่ากันหรือไม่ โดย "ทุก key" หมายถึง key สุดท้ายทั้งหมด เช่น ถ้า key ไหนมีอ็อบเจกต์ซ้อนเป็นค่า เราต้อง traverse จนถึงท้ายของอ็อบเจกต์ซ้อนและตรวจสอบค่านั้น

ตัวอย่างเช่น - ถ้าอ็อบเจกต์คือ:

const obj = {
  a: 1,
  b: 1,
  c: {
    aa: 1
  }
};

ฟังก์ชันควรคืน true เพราะ key สุดท้ายทั้งหมดมีค่าเท่ากัน (1) มาเขียนโซลูชันแบบ recursive สำหรับปัญหานี้กัน:

ตัวอย่างโค้ด

const obj = {
  a: 1,
  b: 1,
  c: {
    aa: 3
  }
};

const allSame = (obj, value) => {
  const keys = Object.keys(obj);
  for (let i = 0; i < keys.length; i++) {
    if (typeof obj[keys[i]] === "object" && !Array.isArray(obj[keys[i]])) {
      return allSame(obj[keys[i]], value);
    }
    if (!value) {
      value = obj[keys[i]];
      continue;
    }
    if (obj[keys[i]] !== value) {
      return false;
    }
  }
  return true;
};

console.log(allSame(obj));
console.log(allSame({ a: 1, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: { x: 1 }, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: 1, b: 1, c: { aa: 2 } }));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

false true true false