如何在 JavaScript 中檢查物件上每個屬性是否完全相同?


假設我們需要編寫一個函式,比如 isSame(),該函式接收一個巢狀物件,並根據所有鍵是否具有相同的值返回一個布林值。當我們說所有鍵時,我們的意思是所有最後一個鍵,比如,如果一個鍵的值是巢狀物件,我們要求遍歷到巢狀物件的末尾並檢查該值。

例如,如果物件為 −

const obj = {
   a: 1,
   b: 1,
   c: {
      aa: 1
   }
};

則該函式應返回 true,因為所有最後一個鍵都具有相同的值 (1)。因此,讓我們針對這個問題編寫一個遞迴解決方案。

示例

const obj = {
   a: 1,
   b: 1,
   c: {
      aa: 3
   }
};
const allSame = (obj, value) => {
   const keys = Object.keys(obj);
   for(let i = 0; i < keys.length; i++){
      if(typeof obj[keys[i]] === "object" &&
      !Array.isArray(obj[keys[i]])){
         return allSame(obj[keys[i]], value);
      };
      if(!value){
         value = obj[keys[i]];
         continue;
      }
      if(obj[keys[i]] !== value){
         return false;
      };
   };
   return true;
}
console.log(allSame(obj));
console.log(allSame({ a: 1, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: { x: 1 }, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: 1, b: 1, c: { aa: 2 } }));

輸出

控制檯中將輸出 −

false
true
true
false

更新日期:2020-08-26

349 次瀏覽

職業生涯精彩開啟

完成課程獲得認證

開始吧
廣告
© . All rights reserved.