Published
Edited
Jul 30, 2020
Insert cell
md`# Properties are equal`
Insert cell
{
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';
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more