如果`obj`上的每个属性都相同,则返回true

时间:2017-10-06 21:19:44

标签: javascript

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

{  
   a:1,
   b 1,
   c:{  
      aa:1,

   },
};

将是true 如果我们将aa: 1替换为aa: 2,我们想要返回false

3 个答案:

答案 0 :(得分:2)

这是一种方法,只需用IIFE递归迭代,然后将所有值放在一个数组中,然后比较它们



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

function isAllSame(o) {
  var values = [];

  (function rec(obj) {
    Object.keys(obj).forEach(function(key) {
      if (typeof obj[key] === 'object') return rec(obj[key]);
      values.push(obj[key])
    })  
  })(o);

  return values.every( x => values[0] === x);
}

console.log( isAllSame(obj) );




答案 1 :(得分:1)

您可以使用一个对象来检查值,因为该值是通过使用引用回溯到调用函数的。

要检查的值包含在一个对象中,该对象允许在所有递归调用函数中使用它,即使在第一个没有实际值的第一个中也是如此,因为具有嵌套属性的对象。

在第一次调用value时,如果为false,则使用对象初始化。如果找到第一个实数值,则它将用作对象的反向传播,并且可以在check的任何正在运行的调用中使用。

使用

Array#every

  

every() 方法测试数组中的所有元素是否都通过了提供的函数实现的测试。

如果值与第一个找到的值不匹配,则提前退出。 Thi是回调的退出条件和要回馈的值。

function check(object, value) {
    value = value || {};
    return Object.keys(object).every(function (k) {
        if (object[k] && typeof object[k] === 'object') {
            return check(object[k], value);
        }
        if (!('value' in value)) {
            value.value = object[k];
            return true;
        }
        return object[k] === value.value;
    });
}

console.log(check({ a: 1, b: 1, c: { aa: 1 } }));
console.log(check({ a: { x: 1 }, b: 1, c: { aa: 1 } }));
console.log(check({ a: 1, b: 1, c: { aa: 2 } }));

答案 2 :(得分:0)

*现在可以使用

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

             function checkifEqual(var object, var recent)
            {
             for( var x = 0; x < object.length; x++)
            {
               if(x == 0 && recent == null)
                {
                  recent = object[x];
                  continue;
                }
              if( typeof(object[x]) !== 'object' && object[x] == recent)
              {

                 continue;
              }
              else if(typeof(object[x]) === 'object')
              { 
                 if( checkifEqual(object[x],recent))
                    {
                          continue;  
                    }
                    else
                    {
                       return false;
                    }

              }
             else
             {
              return false;
             }
            }
          return true;
      }

      console.log(checkifEqual(obj,null));

在第一次调用时,您将传递checkifEqual(Object,null)

相关问题