{
const leaves = {
a: 1,
b: 1,
c: {
a1: 1,
b1: 2,
c1: {
a2: 1,
b2: 2,
c2: 1
},
},
};
let criterion = null;
const stack = [leaves];
const keysStack = [''];
while (stack.length > 0) {
const entity = stack.shift();
const keyStack = keysStack.shift();
const keys = Object.keys(entity);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (typeof entity[key] === 'object') {
stack.push(entity[key]);
keysStack.push((keyStack ? keyStack + '.' : '') + key);
} else {
if (criterion === null) {
criterion = entity[key];
} else if (entity[key] !== criterion) {
return `${keyStack}.${key} propety mismatch of ${entity[key]} against criterion of ${criterion}`;
}
}
}
}
return 'all properties equal';
}