Подскажите, пожалуйста. Сейчас функция работает как надо. Но если у функции worker убрать аргумент, то вылетает ошибка - глубина стека превышена. Почему так происходит? Вроде же функция запоминает свое окружение и может дотянуться до аргумента первой функции (collapse).
const data = {
a: {
b: [1, 2],
c: {
d: 3,
f: {
j: [20, 30]
}
}
},
h: 4
};
function checkType(value) {
const type = Object.prototype.toString.call(value);
return type.substring(8, type.length - 1);
}
function collapse(obj) {
const result = {};
let temp = '';
function worker(obj) {
for (let prop in obj) {
if (checkType(obj[prop]) == 'Object') {
temp += prop + '.';
worker(obj[prop]);
temp = '';
} else if (checkType(obj[prop]) == 'Array') {
for (var i = 0; i < obj[prop].length; i++) {
let s = temp;
s += prop + '.' + [i];
result[s] = obj[prop][i];
s = '';
}
} else {
result[temp + prop] = obj[prop];
}
}
}
worker(obj);
return result;
}
console.log(collapse(data));