เรามีออบเจกต์ที่มีออบเจกต์อื่นเป็นค่าของพร็อพเพอร์ตี มันซ้อนกัน 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() Recursion จะเป็นวิธีที่เหมาะสมที่สุดสำหรับสถานการณ์นี้ โดยคำนึงถึงการซ้อนกัน
โค้ดเต็มสำหรับฟังก์ชัน 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'));
ในฟังก์ชันนี้ ก่อนอื่นเราวนลูปผ่านออบเจกต์หลัก และเมื่อเราพบการซ้อน เราจะวนลูปผ่านซับออบเจกต์แบบ recursive ค้นหาคีย์ที่ต้องการ หากเราพบคีย์ที่ต้องการ เราจะบันทึกค่าของมันทันทีใน results array และในท้ายที่สุดเมื่อเราวนลูปเสร็จ เราจะคืนค่า results array ที่มีค่าที่ต้องการ
Time complexity ของฟังก์ชันนี้คือ O(mn) โดยที่ m คือจำนวน child objects ภายในออบเจกต์หลัก และ n คือระดับการซ้อนที่ลึกที่สุด
ผลลัพธ์ในคอนโซลสำหรับโค้ดนี้จะเป็น:
[ 31, 22, 26 ]