мир = { ключники: [], выставленныеЗначения: {}, }; мир.выпрямить = function(obj) { // https://stackoverflow.com/a/42121920 var newObj = {}; for (var key in obj) { if (typeof obj[key] === 'object' && obj[key] !== null) { var temp = мир.выпрямить(obj[key]) for (var key2 in temp) { newObj[key + "." + key2] = temp[key2]; } } else { newObj[key] = obj[key]; } } return newObj; }; мир.лишьНовыеЗначения = function(значения) { var новые = {}; for (var ключ in значения) { var было = мир.выставленныеЗначения[ключ]; var стало = значения[ключ]; console.debug("было/стало/результат", было, стало, !(было && было == стало)); if (!(было != null && было == стало)) { новые[ключ] = стало; мир.выставленныеЗначения[ключ] = стало; } } return новые; }; мир.разобрать = function(словарь) { var значения = мир.лишьНовыеЗначения(мир.выпрямить(словарь)); for (var ключ in значения) { var путь = ключ.split("."); var значение = значения[ключ]; for (var номер in мир.ключники) { мир.ключники[номер](ключ, путь, значение); } } };