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