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

Làm cách nào để kiểm tra xem mọi thuộc tính trên đối tượng có giống nhau một cách đệ quy trong JavaScript hay không?

Giả sử, chúng ta được yêu cầu viết một hàm, chẳng hạn như isSame () chấp nhận một đối tượng lồng nhau và trả về một boolean tùy thuộc vào thực tế là tất cả các khóa có cùng giá trị hay không. nếu một khóa có một đối tượng lồng nhau làm giá trị của nó, chúng tôi bắt buộc phải chuyển đến cuối đối tượng lồng nhau và kiểm tra giá trị đó.

Ví dụ - Nếu đối tượng là -

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

Khi đó, hàm sẽ trả về true vì tất cả các khóa kết thúc có cùng giá trị (1). Do đó, hãy viết một giải pháp đệ quy cho vấn đề này.

Ví dụ

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

Đầu ra

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

false
true
true
false