如何在 JavaScript 中递归检查对象上的每个属性是否相同?

javascriptweb developmentobject oriented programming更新于 2025/10/12 17:16:17

假设我们需要编写一个函数,即 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

相关文章


有用资源