Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

แสดงรายการค่าที่ซ้ำกันทั้งหมดในวัตถุ JavaScript ที่ซ้อนกัน


สมมติว่าเรามีวัตถุที่ซ้อนกันซึ่งมีข้อมูลเกี่ยวกับสัตว์เลี้ยงบางตัวเช่นนี้ -

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' ]