如何检查对象中的每个属性是否在JavaScript中递归相同
{
a:1,
b 1,
c:{
aa:1,
},
};
将是true
如果我们将aa: 1
替换为aa: 2
,我们想要返回false
。
答案 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
的任何正在运行的调用中使用。
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)