สมมติว่าเรามีวัตถุที่ซ้อนกันซึ่งมีข้อมูลเกี่ยวกับสัตว์เลี้ยงบางตัวเช่นนี้ -
const pets = { owner1: 'Frank', owner2: 'Curly', owner3: 'Maurice', dogs: { terriers: { name1: 'Fido', name2: 'Woofy', name3: { goodDog: 'Frank', badDog: 'Judas', } }, poodles: { name1: 'Curly', name2: 'Fido', }, }, };
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับวัตถุดังกล่าวเพียงตัวเดียว
ฟังก์ชันควรระบุตำแหน่งค่าที่ซ้ำกันทั้งหมดที่มีอยู่ในวัตถุ จากนั้นฟังก์ชันควรส่งคืนอาร์เรย์ที่มีค่าที่ซ้ำกันทั้งหมดจากวัตถุ
ดังนั้น สำหรับวัตถุนี้ ผลลัพธ์ควรเป็น −
const output = ['Frank', 'Curly', 'Fido'];
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const pets = { owner1: 'Frank', owner2: 'Curly', owner3: 'Maurice', dogs: { terriers: { name1: 'Fido', name2: 'Woofy', name3: { goodDog: 'Frank', badDog: 'Judas', } }, poodles: { name1: 'Curly', name2: 'Fido', }, }, }; const recursiveSearch = (obj, map = {}, res = []) => { Object.keys(obj).forEach(key => { if(typeof obj[key] === "object"){ return recursiveSearch(obj[key], map, res); }; map[obj[key]] = (map[obj[key]] || 0) + 1; if(map[obj[key]] === 2){ res.push(obj[key]); } }); return res; }; console.log(recursiveSearch(pets));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ 'Frank', 'Curly', 'Fido' ]