Рекурсивный перебор вложенных объектов на JavaScript
Рекурсивный перебор вложенных объектов на JavaScript и проверка на целочисленное значение
JavaScript
var fractal = {
a1: {
b1: {
c: 1
},
b2: {
c: 222
},
b3: {
c: {
d: 33,
e: 2.5,
f: {
g: 9999,
h: {
i: {
j: 1001,
k: 'строка',
l: [1,2,3],
m: function() {}
}
}
}
}
}
}
}
fractal.a1.b2.m = fractal.a1.b2;
getFiniteValue(fractal);
function getFiniteValue(obj) {
var handledFlag = 'temp__isAlreadyHandled__';
getProp(obj);
function getProp(o, stack) {
var propertyPath;
for(var prop in o) {
if(typeof(o[prop]) === 'object') {
if(!o[prop][handledFlag]) {
Object.defineProperty(o[prop],handledFlag, {
value: true,
writable:false,
configurable: true
});
if(!stack)
propertyPath = 'rootObject.' + prop
else
propertyPath = stack + '.' + prop;
getProp(o[prop], propertyPath);
} else {
propertyPath = stack + '.' + prop;
document.write('<span style="color:red">Циклическая ссылка. Свойство: ' + propertyPath+'</span><br>');
}
delete o[prop][handledFlag]
} else if(typeof(o[prop]) === 'number' && isInteger(o[prop])) {
document.write('Integer: '+o[prop]+' '+ isInteger(o[prop])+'<br>');
}
}
}
function isInteger(num) {
return (num ^ 0) === num;
}
}