สมมุติว่าเรามีอ็อบเจ็กต์ที่มีอ็อบเจกต์อื่นเป็นค่าคุณสมบัติของมัน มันซ้อนกัน 2-3 ระดับหรือมากกว่านั้น
นี่คือตัวอย่างวัตถุ −
const people = { Ram: { fullName: 'Ram Kumar', details: { age: 31, isEmployed: true } }, Sourav: { fullName: 'Sourav Singh', details: { age: 22, isEmployed: false } }, Jay: { fullName: 'Jay Grewal', details: { age: 26, isEmployed: true } } }
งานของเราคือการเขียนฟังก์ชันที่ยอมรับวัตถุนี้และสตริง ค้นหาวัตถุทั้งหมดสำหรับสตริงนั้นเป็นคีย์ และส่งกลับอาร์เรย์ที่มีค่าของคีย์ทั้งหมดที่ตรงกับสตริงนั้น
เรามาเรียกฟังก์ชัน recursiveSearch() กันดีกว่า การเรียกซ้ำจะเป็นวิธีที่เหมาะสมที่สุดในการจัดการกับสถานการณ์นี้ เมื่อพิจารณาจากการทำรัง
ดังนั้นโค้ดแบบเต็มสำหรับฟังก์ชันนี้ recursiveSearch() จะเป็น −
ตัวอย่าง
const people = { Ram: { fullName: 'Ram Kumar', details: { age: 31, isEmployed: true } }, Sourav: { fullName: 'Sourav Singh', details: { age: 22, isEmployed: false } }, Jay: { fullName: 'Jay Grewal', details: { age: 26, isEmployed: true } } } const recursiveSearch = (obj, searchKey, results = []) => { const r = results; Object.keys(obj).forEach(key => { const value = obj[key]; if(key === searchKey && typeof value !== 'object'){ r.push(value); }else if(typeof value === 'object'){ recursiveSearch(value, searchKey, r); } }); return r; }; console.log(recursiveSearch(people, 'age'));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
[ 31, 22, 26 ]
ในฟังก์ชันข้างต้น ก่อนอื่นเราวนซ้ำบนออบเจ็กต์หลัก และเมื่อใดก็ตามที่เราพบ anesting เราจะวนซ้ำในการค้นหาออบเจกต์ย่อยเพื่อค้นหาคีย์ที่ต้องการ หากเราพบคีย์ที่ต้องการ เราจะบันทึกค่าของคีย์นั้นในอาร์เรย์ผลลัพธ์ทันทีและที่ สุดท้ายเมื่อเราเสร็จสิ้น เราจะส่งคืนอาร์เรย์ผลลัพธ์ที่มีค่าที่ต้องการ
ความซับซ้อนของเวลาของฟังก์ชันนี้คือ O(mn) โดยที่จำนวนออบเจ็กต์ย่อยภายในออบเจ็กต์หลัก และ m คือระดับการซ้อนที่ลึกที่สุด