|
- мир = {
- ключники: [],
- выставленныеЗначения: {},
- };
-
- мир.выпрямить = 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 стало = значения[ключ];
- if (!(было != null && было == стало))
- {
- новые[ключ] = стало;
- мир.выставленныеЗначения[ключ] = стало;
- }
- }
- return новые;
- };
-
- мир.разобрать = function(словарь) {
- var значения = мир.лишьНовыеЗначения(мир.выпрямить(словарь));
- for (var ключ in значения)
- {
- var путь = ключ.split(".");
- var значение = значения[ключ];
- for (var номер in мир.ключники)
- {
- мир.ключники[номер](ключ, путь, значение);
- }
- }
- };
-
- мир.задать = function(словарь, ключ, значение) {
- var путь = ключ.split(".");
- if (путь.length == 1)
- {
- словарь[ключ] = значение;
- }
- else
- {
- var пройти = путь.length - 1;
- var вложенность = словарь;
- for (var номер = 0; номер < пройти; ++номер)
- {
- var внутреннийКлюч = путь[номер];
- console.debug("проход номер/внутреннийКлюч/путь", номер, внутреннийКлюч, путь);
- var внутреннийСловарь = вложенность[внутреннийКлюч];
- if (!внутреннийСловарь)
- {
- вложенность[внутреннийКлюч] = {};
- внутреннийСловарь = вложенность[внутреннийКлюч];
- вложенность = внутреннийСловарь;
- }
- // Прошли.
- if (пройти - номер == 1)
- {
- внутреннийСловарь[путь[пройти]] = значение;
- }
-
- }
- }
- };
|