Computer >> Máy Tính >  >> Lập trình >> Javascript

Liệt kê tất cả các giá trị trùng lặp trong một đối tượng JavaScript lồng nhau

Giả sử, chúng ta có một đối tượng lồng nhau chứa dữ liệu về một số vật nuôi như thế này -

const pets = {
   owner1: 'Frank',
   owner2: 'Curly',
   owner3: 'Maurice',
   dogs: {
      terriers: {
         name1: 'Fido',
         name2: 'Woofy',
         name3: {
            goodDog: 'Frank',
            badDog: 'Judas',
         }
      },
      poodles: {
         name1: 'Curly',
         name2: 'Fido',
      },
   },
};

Chúng tôi bắt buộc phải viết một hàm JavaScript có một đối tượng như vậy.

Hàm phải định vị tất cả các giá trị trùng lặp tồn tại trong đối tượng và sau đó hàm sẽ trả về một mảng có chứa tất cả các giá trị trùng lặp từ đối tượng.

Vì vậy, đối với đối tượng này, đầu ra phải là -

const output = ['Frank', 'Curly', 'Fido'];

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

[ 'Frank', 'Curly', 'Fido' ]