สมมุติว่าเราต้องเขียนฟังก์ชัน พูด isSame() ที่ยอมรับวัตถุที่ซ้อนกันและส่งกลับบูลีนขึ้นอยู่กับข้อเท็จจริงว่าคีย์ทั้งหมดมีค่าเหมือนกันหรือไม่ เมื่อพูดคีย์ทั้งหมดเราหมายถึงคีย์สุดท้ายทั้งหมดเช่น หากคีย์มีออบเจ็กต์ที่ซ้อนกันเป็นค่าของคีย์ เราจะต้องสำรวจไปยังจุดสิ้นสุดของออบเจ็กต์ที่ซ้อนกันและตรวจสอบหาค่านั้น
ตัวอย่างเช่น − หากวัตถุคือ −
const obj = { a: 1, b: 1, c: { aa: 1 } };
จากนั้นฟังก์ชันควรคืนค่า จริง เนื่องจากคีย์สิ้นสุดทั้งหมดมีค่าเท่ากัน (1) ดังนั้น เรามาเขียนวิธีแก้ปัญหาแบบเรียกซ้ำสำหรับปัญหานี้กัน
ตัวอย่าง
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