列出巢狀 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' ]

更新日期: 21-11-2020

946 次瀏覽

開啟您的職業生涯

完成課程即可獲得認證

開始
廣告
© . All rights reserved.